我需要在AngularJS应用中检查用户的状态,以显示特定的功能内容。在我看来,我有以下HTML:
<span ng-show="authService.isSuperUser()">You are a Super User</span>
要确定用户是否具有“超级用户”状态并显示跨度,我的服务中包含以下JavaScript代码
this.isSuperUser = function () {
if (loggedInUser !== null) { // loggedInUser is true in most cases
return getSuperUser();
} else {
return false;
}
};
var getSuperUser = function(){
return $http({method: 'GET', url: '/url/to/rest/service/for/superuser' }).then(function (response) {
return response; // this is either true or false and is working
}, function () {
console.log('Yikes! An Error!');
return false;
});
};
现在getSuperUser
函数提供了正确的结果(true或false),但是当我在浏览器中运行时,我生成了数千个 Infinite $ digest Loop 错误。我显然是以错误的方式解决这个问题,关于如何最好地实现我的解决方案并停止产生错误的任何想法?当用户访问myapp.com/#/youraccount等特定网址并且之前未在应用中加载ng-show="authService.isSuperUser()"
时,会加载HTML视图。
答案 0 :(得分:1)
试试这段代码:
.factory('authService', function($http) {
return {
isSuperUser: function () {
return $http.get(......);
}
};
})
.controller('MyCtrl', function($scope, authService) {
$scope.isSuperUser = authService.isSuperUser();
})
<span ng-show="isSuperUser">you are a super user</span>
当你的控制器运行时,它会调用启动ajax调用的服务并立即返回一个promise。
将该承诺复制到名为isSuperUser的$ scope变量。
你的观点与这个承诺有关。当它被解决时,它将是真或假,并且ng-show将相应地起作用。在那之前它被认为是假的(我想:P)