orb*_*kov 1 javascript angularjs parse-platform
我的parse / AngularJS应用程序正在使用Promises。在登录功能是假设重定向与用户$ location.path,但我不得不调整它,使其根据该岗位工作:
在AngularJS中$ location.path不会在工厂中更改
根据这一SO用户,你需要将调用替换到$ location.path与
$rootScope.$apply( function(){$location.path('/somelocatin'); } );
Run Code Online (Sandbox Code Playgroud)
在这里查看答案:https : //stackoverflow.com/a/19738154/1743693
这解决了问题,但我必须了解:为什么本地电话不起作用?调整如何解决该问题?我怎么知道我没有搞乱AngularJS周期?还是与Promise模式的Parse实现更相关?
这是登录代码:
function login() {
vm.dataLoading = true;
var response = AuthenticationService.Login(vm.email, vm.password).then(
function (user) {
vm.dataLoading = false;
//$location.path('/'); -- <-- **doesn't work**
vm.user = Parse.User.current().getEmail();
$rootScope.$apply(function () { $location.path('/'); });
},
function () {
$rootScope.$apply(function () { $location.path('/login'); });
FlashService.Error(response.message);
vm.dataLoading = false;
});
};
Run Code Online (Sandbox Code Playgroud)
和身份验证服务的实现:
function Login(username, password, success, error) {
return Parse.User.logIn(username, password, {
success: function (user) {
return user;
},
error: function (user, error) {
return { user: user, error: error };
}
});
}
Run Code Online (Sandbox Code Playgroud)
(可在此处找到原始登录源:http : //jasonwatmore.com/post/2015/03/10/AngularJS-User-Registration-and-Login-Example.aspx)
因为$location 与 Angular摘要周期以及许多其他Angular内置服务紧密相关,所以$location.path 所做的只是更新内部$$ path属性。在下一个摘要中,它将用于更新路径。
并且由于$http还与摘要相关,因此在解决或拒绝诺言时会触发摘要。通常,无需担心手动触发摘要,$ location将在下一个摘要期间更新位置。引用的问题中的另一个答案明确指出了这一点。
由于承诺不是由内置服务提供的,而是由提供的Parse,因此摘要需要手动触发,因此Angular会“知道”位置已更新。考虑
$location.path('/');
$rootScope.$apply();
Run Code Online (Sandbox Code Playgroud)
语法,如果您更满意的话。
可以设置观察者来调查摘要何时击中以及此时位置路径发生了什么
$rootScope.$watch(function () {
console.log('digest! and the path is ' + $location.$$path);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |