$http承诺不更新作用域(ng-hide)
$http promise not updating scope (ng-hide)
我在这里试图实现的是向我的api发送一个get请求,该请求根据用户是否登录而以true/false进行响应。理想情况下,如果用户登录,我想隐藏登录表单。我使用的是angular的内置http方法,该方法返回一个promise,据我所知,它已经包含在$apply中,所以我本以为范围会自动更新。
我的控制器:
.controller('MyCtrl1', ['$scope', 'isLoggedIn', '$timeout', function($scope, isLoggedIn, $timeout) {
isLoggedIn.getState().then(function(result) {
$scope.displayLogin = result.data.state;
});
$scope.getLoginState = function() {
console.log($scope.displayLogin);
}
}]);
我的服务:
.factory('isLoggedIn', function($http, $q) {
return {
getState: function(scope) {
return $http.get('/login-state').then(function(result) {
return result
});
}
}
})
html:
<form method="most" action="/login" ng-hide="displayLogin">
我知道值本身正在更新,因为我有一个带有ng-click的按钮绑定到getLoginState方法,该方法返回具有正确值的displayLogin,看起来ng-hide没有反映这一点吗?就好像作用域不知道该改变一样。
我如何才能做到这一点,让我真正的价值隐藏形式?
根据您的代码,您似乎指定您的工厂返回$http
服务的承诺?
.factory('isLoggedIn', function($http, $q) {
return {
getState: function(scope) {
return $http.get('/login-state');
}
}
});
我会尝试制作一个plunker来检查这一点,但如果你不是
isLoggedIn.getState().then(function(result) {
$scope.displayLogin = result.data.state;
});
尝试写入
$scope.displayLogin = isLoggedIn.getState()
并修改您的工厂以返回$http.get的结果,而不是$http.gt本身?
更新:这是一个使用promise($q服务)的工厂版本:
.factory('isLoggedIn', function($http, $q) {
return {
getState: function(cb) {
var deferred = $q.defer();
$http.get("/login-state").success(function(data){
deferred.resolve(data);
});
deferred.promise.then(function (result) {
return cb(result);
});
}
}
});
然后你这样使用它:
isLoggedIn.getState(function(returnData) {
$scope.displayLogin = returnData;
});
我不得不使用回调来让它正确更新。您的promise对象应该在获得数据时更新。以下是指向plunker的链接:http://plnkr.co/edit/c5YguV5PbE29ZLay3oI4?p=preview
相关文章:
- 从ng模板访问作用域
- ng重复中的ng模型-初始化唯一作用域属性
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- ng根据作用域值隐藏
- 阻止“ng include”创建孤立的作用域.AngularJS
- 实时 Angular js ng-hide 不起作用
- 角度指示ng重复作用域和服务
- 以新模式访问作用域形式ng repeat
- AngularJS select with ng选项不更新父作用域中的引用对象属性
- AngularJS:将ng重复作用域暴露给ng transclude
- AngularJS的ng-include作用域
- 使用ng-click在与ng-repeat相同的标签上使用ng-repeat作用域的参数
- 如何从两次或三次嵌套的ng-repeat作用域访问控制器的作用域
- 使用ng-options时,Ng-model作用域不可用
- 改变函数中的ng-repeat作用域不会更新作用域
- $http承诺不更新作用域(ng-hide)
- 访问ng重复作用域
- 如何在ng重复作用域内创建属性
- ng-repeat作用域的奇怪行为
- 如何访问ng-repeat作用域?