Angular doc声明:
Angular services are singletons
我想将角度服务用作单例,因此我可以在应用程序的每个位置访问已登录的用户数据。但是服务似乎没有返回相同的数据,这是我的代码。
服务:
angular.module("myapp", [])
.service("identity", function (){
this.token = null;
this.user = null;
});
Facotry :
.factory("authentication", function (identity, config, $http, $cookieStore) {
var authentication = {};
authentication.login = function (email, password, remember) {
var p=$http.post(config.baseUrl+"api/","email="+email+"&password="+password);
return p.then(function (response) {
identity= response.data;
if (remember) {
$cookieStore.put("identity", identity);
}
});
};
authentication.isAuthenticated = function () {
if (!identity.token) {
//try the cookie
identity = $cookieStore.get("identity") || {};
}
console.log(identity) // {token: 23832943, user: {name: something}}
return !!identity.token;
};
return authentication;
});
控制器:
.controller('LoginCtrl', function ($state, $scope, authentication, identity) {
var user = $scope.user = {};
$scope.login = function () {
authentication.login(user.email, user.password, user.remember)
.then(function () {
if (authentication.isAuthenticated()) {
console.log(identity); // {token:null, user: null}
$state.transitionTo("dashboard");
}
});
};
});
身份将注入身份验证和控制器。但是第一个控制台记录正确的用户数据,而第二个控制台只记录最初定义的相同数据。如果服务是单独的服务,我希望两个标识返回相同的数据。我在这做错了什么?任何指针都表示赞赏。
答案 0 :(得分:2)
在authentication
服务变更
identity= response.data;
到
identity.token=response.data.token;
identity.user=response.data.user;
事情应该有效。
基本上你正在做的是替换identity
对象引用。