$scope 不更新变化
$scope not updating on change
我正在使用 Satellizer 进行身份验证,登录后,header 中的 login/register 按钮应该更改为注销,但他们没有。
这是我的 header 指令:
angular.module('pages.components.navHeader', [
'common.services.authenticationService'
])
.directive('navHeader', function () {
var directive = {};
directive.restrict = "E";
directive.templateUrl = "navHeader.tpl.html";
directive.controller = ['$scope','$location', 'CONFIG', 'authenticationService', function navHeaderCtrl($scope, $location, CONFIG, authenticationService) {
$scope.isAuthenticated = authenticationService.isAuthenticated();
$scope.logout = function (){
authenticationService.logout();
};
}];
return directive;
});
这是我的 header 模板中有趣的部分:
<li ng-show="!isAuthenticated"><a ng-href="#">Login</a></li>
<li ng-show="!isAuthenticated"><a ng-href="#">Register</a></li>
<li ng-show="isAuthenticated"><a ng-click="logout()" href="#">Logout</a></li>
我有一个工厂作为额外的层,以防 satellizer 对我不起作用,这只是一个执行此操作的指令:
.factory ('authenticationService', ['CONFIG', '$auth', function authenticationService (CONFIG, $auth) {
var authentication = {};
authentication.isAuthenticated = function (){
return $auth.isAuthenticated();
};
return authentication;
}])
所以即使我点击注销,header 也不会更新。我在 header 中设置 isAuthenticated 的方式有问题吗?
将您的控制器代码更改为此
$scope.isAuthenticated = authenticationService.isAuthenticated;
然后在 html 你可以简单地使用。
ng-show="isAuthenticated()"
备注
ng-show
will call authenticationService.isAuthenticated
method on each digest
cycle
我正在使用 Satellizer 进行身份验证,登录后,header 中的 login/register 按钮应该更改为注销,但他们没有。
这是我的 header 指令:
angular.module('pages.components.navHeader', [
'common.services.authenticationService'
])
.directive('navHeader', function () {
var directive = {};
directive.restrict = "E";
directive.templateUrl = "navHeader.tpl.html";
directive.controller = ['$scope','$location', 'CONFIG', 'authenticationService', function navHeaderCtrl($scope, $location, CONFIG, authenticationService) {
$scope.isAuthenticated = authenticationService.isAuthenticated();
$scope.logout = function (){
authenticationService.logout();
};
}];
return directive;
});
这是我的 header 模板中有趣的部分:
<li ng-show="!isAuthenticated"><a ng-href="#">Login</a></li>
<li ng-show="!isAuthenticated"><a ng-href="#">Register</a></li>
<li ng-show="isAuthenticated"><a ng-click="logout()" href="#">Logout</a></li>
我有一个工厂作为额外的层,以防 satellizer 对我不起作用,这只是一个执行此操作的指令:
.factory ('authenticationService', ['CONFIG', '$auth', function authenticationService (CONFIG, $auth) {
var authentication = {};
authentication.isAuthenticated = function (){
return $auth.isAuthenticated();
};
return authentication;
}])
所以即使我点击注销,header 也不会更新。我在 header 中设置 isAuthenticated 的方式有问题吗?
将您的控制器代码更改为此
$scope.isAuthenticated = authenticationService.isAuthenticated;
然后在 html 你可以简单地使用。
ng-show="isAuthenticated()"
备注
ng-show
will callauthenticationService.isAuthenticated
method on eachdigest
cycle