yel*_*int 6 javascript angularjs angularjs-service angularjs-scope angularjs-controller
UserService维护sessionStatus用户(布尔值)的服务.ng-show=sessionStatus(即如果未登录(false),则不显示).sessionStatusViewController因此,应该总是匹配UserService......对吗?sessionStatus值更改,并且视图应该更新为新的结果ng-show.... <a ng-show="sessionStatus" ng-click="logout()">Logout</a>
Run Code Online (Sandbox Code Playgroud)
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;
});
});
Run Code Online (Sandbox Code Playgroud)
注意:appUser是HTML头中注入的全局变量(一个hacky修复,直到我得到会话/ 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();
})
}
};
});
Run Code Online (Sandbox Code Playgroud)
而不是a watch,只需使用一个function返回会话状态的作用域service.
$scope.sessionStatus = function() {
return userService.sessionStatus();
};
Run Code Online (Sandbox Code Playgroud)
您的退出链接如下所示:
<a ng-show="sessionStatus()" ng-click="logout()">Logout</a>
Run Code Online (Sandbox Code Playgroud)
一个精简的Plunker为您的功能:http://plnkr.co/edit/u9mjQvdsvuSYTKMEfUwR?p = preview