角度控制器检查服务承诺更新视图
Angular Controller Checks Service Promise to Update View
我在使用角度控制器和服务时遇到问题,无法让它们很好地协同工作。
我有 Parse API 登录,我希望控制器知道发生了未/成功的登录并相应地更新视图。
我尝试从服务的 Parse 登录承诺返回一个布尔值,但控制器看不到这一点,当我设置一个等于服务函数的变量时,我得到"未定义"。
var app = angular.module('myApp', []);
app.controller('myController', ['scope', 'userService', function($scope, userService){
$scope.ctrlFunc = function(){
var login = userService.login($scope.username, $scope.password);
//$scope.username & password are defined in other section
console.log(login); //returns 'undefined'
if(login == true){
// go to other function
}
else{
// do $scope changes to view
}
};
}]);
app.service ('userService', function(){
this.login = function(){
Parse.User.logIn(username, password,{
success: function (user){
return true;
},
error: function (error){
return false;
}
})
};
});
我的控制器逻辑臃肿,所以我尝试将其卸载到服务中。对于一个有棱角的初学者来说,说起来容易做起来难......
您尚未考虑登录行为的异步性质。您要么需要使用回调,要么使用 Angular 承诺来处理登录成功或失败。
通过承诺机制,服务成为
app.service ('userService', function($q){
var defer=$q.defer();
this.login = function(){
Parse.User.logIn(username, password,{
success: function (user){
defer.resolve(true);
},
error: function (error){
defer.reject(false);
}
})
return defer.promise;
};
});
现在在控制器中您可以执行以下操作:
var login = userService.login($scope.username, $scope.password)
.then(function(result) { //result will be true and you can react to it.},
function(error) { //error will be true and you can react to it.})
阅读有关 Angular 承诺的信息,了解事物的运作方式。
你的用户服务返回一个承诺,
this.login = function(){
return userService.logIn(username, password)
};
然后在控制器中,
var login = Parse.User.login($scope.username, $scope.password).then(function(){
$scope.isLoggedIn=true;
}).error(function(){
$scope.isLoggedIn=false;
})
在 Parse.User 服务中,它应该返回一个承诺,
Parse.User.login=function(username,pwd){
return $http.post('/someUrl', {userName:username,password:pwd})
}
相关文章:
- $routeParams在传递到新视图时未定义&控制器
- ajax.beginform() 不更新部分视图 MVC
- 角度指令没有更新模型视图
- 如何在渲染新视图之前关闭所有事件
- 从Backbone中的另一个视图调用新视图
- Angular数组更改时更新HTML视图
- 更新淘汰视图模型属性时激发更改事件
- Angular2 在创建 ngSwitch 新视图后调用自定义函数
- Knockout.js-更新父视图模型中的数组,在第二个视图模型中使用值
- 比较两个数组,并通过使用 javascript 保留现有对象来更新新值
- 单击按钮时更新角度视图模型
- 当现有 Google 标记移动到另一个位置时,如何更新新的纬度和经度
- 如何在 DIV 中更新新图像
- 使用 AJAX 更新的模型更新 AngularJS 视图
- 主干新视图反映旧模型数据
- 如何在单击按钮时动态更新部分视图
- 更新主干视图
- 挖空 - 添加了可观察的不更新新对象
- 使用 ajax 从 php 文件中获取随机数不会更新新结果
- 创建新视图时调用呈现函数