2015-01-19 6 views
0

authentication 서비스에 약간 문제가 있습니다. 나는 기본적으로 내 서비스에이 내 AppCtrl에서서비스중인 서비스가 업데이트되지 않았습니다.

angular.factory('authentication', [..., function() { 
    var currentUser = {}; 

    return { 
     login: function() { 
      currentUser = { username: 'Foo' }; 
     }, 
     logout: function() { 
      currentUser = {}; 
     } 
     user: currentUser; 
    } 
})] 

그리고,이 있습니다

LogoutCtrl에서
angular.module('App').controller('AppCtrl', [..., function() { 
    $rootScope.$on('$stateChangeSuccess', function() { 
     console.log(authentication.user); 
    }); 
}]); 

,이 있습니다 : 상태가 변경되면

angular.controller('LogoutCtrl', [..., function() { 
    authentication.logout(); 
    $state.go('login'); 
}]); 

login으로 변경하면 콘솔에서 여전히 username: 'Foo'을 인쇄합니다.

아이디어가 있으십니까?

+0

작동 $ 적용().? – Beri

답변

1

첫 번째 할 때 사용자의 참조를 참조하는 객체의 할당. 이전에 바운드 된 이전 사용자가 변경되지 않도록 logout()을 호출 할 때 해당 참조를 바꿉니다. 대신 getter 함수에 변경 :

... 
getUser: function() { 
    return user; // always the correct reference 
} 

이제 CONSOLE.LOG에 그에게 전화 당신이 $ 범위를 적용 봤어

+0

'getUser : function() {return currentUser; }'트릭을 한 것처럼 보입니다. 감사! – dsdeiz

1
angular.factory('authentication', [..., function() { 
    var currentUser = {}; 

    return { 
     login: function() { 
      currentUser = { username: 'Foo' }; 
     }, 
     logout: function() { 
      currentUser = {}; 
     } 
     user: currentUser; 
    } 
})] 

귀하의 로그인/로그 아웃 방법은 변수 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를 구현 :

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; 
})] 
관련 문제