设想
UserService
来维护用户的( bool )sessionStatus
。 ng-show=sessionStatus
上显示[注销](即,如果未登录(假),则不显示)。 sessionStatus
的ViewController
应该始终与UserService
的匹配...是吗? sessionStatus
的值,并且 View 应使用ng-show...
的新结果进行更新。 问题
文件文件
看法
<a ng-show="sessionStatus" ng-click="logout()">Logout</a>
ViewController
app.controller('AppController', function($scope, $interval, $http, UserService) {
$scope.logout = function() { UserService.logout(); }
// This ain't working
$scope.$watch(UserService.sessionStatus, function() {
$scope.sessionStatus = UserService.sessionStatus;
});
});
用户服务
注意:appUser是在HTML头中注入(inject)的全局变量(一个hacky修复程序,直到我使 session /cookie正常工作为止)
app.factory('UserService', function($http) {
var pre;
var sessionStatus;
function init() { // Logged in : Logged out
pre = appUser.user != undefined ? appUser.user : { name: 'Logged out', uid: '0' };
sessionStatus = pre.uid != "0" ? true : false;
}
function resetSession() { appUser = null; init(); }
init();
return {
sessionStatus: function() { return sessionStatus; }, // update on change!
logout: function() {
$http.get("/logout").then(function (data, status, headers, config) {
resetSession();
})
}
};
});
最佳答案
代替watch
,只需使用有作用域的function
即可从service
返回 session 状态。
$scope.sessionStatus = function() {
return userService.sessionStatus();
};
您的注销链接如下所示:
<a ng-show="sessionStatus()" ng-click="logout()">Logout</a>
为您的功能精简的Plunker:http://plnkr.co/edit/u9mjQvdsvuSYTKMEfUwR?p=preview
关于javascript - AngularJS:将 Angular 服务属性绑定(bind)到范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26344022/