0

角文档状态:

Angular services are singletons

我想将角度服务用作单例,因此我可以在我的应用程序中的每个位置访问登录的用户数据。但服务似乎没有返回相同的数据,这是我的代码。

服务

angular.module("myapp", [])

.service("identity", function (){
    this.token = null;
    this.user = null;
});

工厂

.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");
            }
        });
    };
});

身份被注入到身份验证和控制器中。但是第一个控制台记录了正确的用户数据,而第二个控制台只记录了最初定义的相同数据。如果服务是如上所述的单例,我希望两个身份返回相同的数据。我在这里做错了什么?任何指针表示赞赏。

4

1 回答 1

2

在您的authentication服务变更中

identity= response.data;

identity.token=response.data.token;
identity.user=response.data.user;

事情应该会奏效。

基本上你正在做的是替换identity对象引用。

于 2013-09-10T10:50:43.053 回答