Javascript 服务中的属性未更新
我的Javascript 服务中的属性未更新,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我的身份验证服务有点问题。我的服务中基本上有以下内容: angular.factory('authentication',[…,function()){ var currentUser={}; 返回{ 登录:函数(){ currentUser={username:'Foo'}; }, 注销:函数(){ currentUser={}; } 用户:当前用户; } })] 在我的AppCtrl中,我有: angular.module('App').controller('AppCtrl',[…,fu
身份验证服务有点问题。我的服务中基本上有以下内容:
angular.factory('authentication',[…,function()){
var currentUser={};
返回{
登录:函数(){
currentUser={username:'Foo'};
},
注销:函数(){
currentUser={};
}
用户:当前用户;
}
})]
在我的AppCtrl
中,我有:
angular.module('App').controller('AppCtrl',[…,function()){
$rootScope.$on(“$stateChangeSuccess”,函数(){
console.log(authentication.user);
});
}]);
在我的LogoutCtrl
中,我有以下内容:
angular.controller('LogoutCtrl',[…,function()){
authentication.logout();
$state.go('login');
}]);
一旦状态更改为登录
,控制台仍会打印用户名:“Foo”
有什么想法吗
angular.factory('authentication', [..., function() {
var currentUser = {};
return {
login: function() {
currentUser = { username: 'Foo' };
},
logout: function() {
currentUser = {};
}
user: currentUser;
}
})]
您的登录/注销方法会更改变量currentUser
的值。这些更改不会传播到authentication.property
两种可能的修复方法:
1) 使用this.user
而不是var currentUser
:
angular.factory('authentication', [..., function() {
return {
login: function() {
this.user = { username: 'Foo' };
},
logout: function() {
this.user = {};
}
user: {};
}
})]
2) 将user
实现为基于getter的属性:
angular.factory('authentication', [..., function() {
var currentUser = {};
var auth = {
login: function() {
currentUser = { username: 'Foo' };
},
logout: function() {
currentUser = {};
}
};
Object.defineProperty(auth, 'user', {
get: function() { return currentUser; }
});
return svc;
})]
在对象中进行第一次赋值时,您引用的是用户的引用。然后在调用logout()时替换该引用,以使先前绑定的旧用户保持不变。将其改为getter函数:
...
getUser: function() {
return user; // always the correct reference
}
现在在console.log中调用它,它就会起作用。您是否尝试应用$scope.$apply()?getUser:function(){return currentUser;}
似乎已经成功了。谢谢