Angular doc の状態:
Angular services are singletons
angular サービスをシングルトンとして使用したいので、アプリケーションのどこからでもログインしているユーザー データにアクセスできます。しかし、サービスは同じデータを返していないようです。これが私のコードです。
サービス:
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");
}
});
};
});
ID は、認証とコントローラーの両方に注入されます。ただし、最初のコンソールは正しいユーザー データをログに記録しますが、2 番目のコンソールは最初に定義されたものと同じデータをログに記録するだけです。前述のようにサービスがシングルトンの場合、2 つの ID が同じデータを返すことが期待されます。ここで何が間違っていますか? 任意のポインタをいただければ幸いです。