属性 服务未更新
Property in service not updated
我的 authentication
服务有点问题。我基本上有这个服务:
angular.factory('authentication', [..., function() {
var currentUser = {};
return {
login: function() {
currentUser = { username: 'Foo' };
},
logout: function() {
currentUser = {};
}
user: currentUser;
}
})]
在我的 AppCtrl
中,我有这个:
angular.module('App').controller('AppCtrl', [..., function() {
$rootScope.$on('$stateChangeSuccess', function() {
console.log(authentication.user);
});
}]);
在我的 LogoutCtrl
中,我有这个:
angular.controller('LogoutCtrl', [..., function() {
authentication.logout();
$state.go('login');
}]);
一旦状态变为login
,控制台仍然打印username: 'Foo'
。
有什么想法吗?
angular.factory('authentication', [..., function() {
var currentUser = {};
return {
login: function() {
currentUser = { username: 'Foo' };
},
logout: function() {
currentUser = {};
}
user: currentUser;
}
})]
您的 login/logout 方法更改变量 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 中调用它,它将起作用
我的 authentication
服务有点问题。我基本上有这个服务:
angular.factory('authentication', [..., function() {
var currentUser = {};
return {
login: function() {
currentUser = { username: 'Foo' };
},
logout: function() {
currentUser = {};
}
user: currentUser;
}
})]
在我的 AppCtrl
中,我有这个:
angular.module('App').controller('AppCtrl', [..., function() {
$rootScope.$on('$stateChangeSuccess', function() {
console.log(authentication.user);
});
}]);
在我的 LogoutCtrl
中,我有这个:
angular.controller('LogoutCtrl', [..., function() {
authentication.logout();
$state.go('login');
}]);
一旦状态变为login
,控制台仍然打印username: 'Foo'
。
有什么想法吗?
angular.factory('authentication', [..., function() {
var currentUser = {};
return {
login: function() {
currentUser = { username: 'Foo' };
},
logout: function() {
currentUser = {};
}
user: currentUser;
}
})]
您的 login/logout 方法更改变量 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 中调用它,它将起作用