角度服务不能作为单身人士工作

时间:2013-09-10 10:36:16

标签: javascript angularjs service

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

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

1 个答案:

答案 0 :(得分:2)

authentication服务变更

identity= response.data;

identity.token=response.data.token;
identity.user=response.data.user;
事情应该有效。

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