현재 사용자 컨텍스트를 AngularJS에 저장하려면 어떻게 해야 합니까?
사용자를 로그인하는 AuthService가 있으며 사용자 json 개체를 반환합니다.이 오브젝트를 설정해, 페이지를 갱신할 필요 없이 애플리케이션 전체에 모든 변경을 반영합니다(로그인/로그아웃 상태).
AngularJS를 어떻게 하면 좋을까요?
이를 위한 가장 쉬운 방법은 서비스를 사용하는 것입니다.예를 들어 다음과 같습니다.
app.factory( 'AuthService', function() {
var currentUser;
return {
login: function() { ... },
logout: function() { ... },
isLoggedIn: function() { ... },
currentUser: function() { return currentUser; }
...
};
});
다음으로 임의의 컨트롤러에서 참조할 수 있습니다.다음 코드는 (지정된 함수를 호출하여) 서비스에서 값의 변화를 감시한 후 변경된 값을 스코프에 동기화합니다.
app.controller( 'MainCtrl', function( $scope, AuthService ) {
$scope.$watch( AuthService.isLoggedIn, function ( isLoggedIn ) {
$scope.isLoggedIn = isLoggedIn;
$scope.currentUser = AuthService.currentUser();
});
});
그런 다음 지시문, 템플릿 등 원하는 대로 정보를 사용할 수 있습니다.메뉴 컨트롤러 등에서 이 작업을 반복할 수 있습니다(필요에 따라 맞춤).서비스 상태를 변경하면 모든 것이 자동으로 업데이트됩니다.
구체적인 내용은 구현에 따라 달라집니다.
AuthService는 일반적으로 모든 사람의 관심사이기 때문에(예를 들어 로그인하지 않은 경우 로그인 뷰를 제외한 모든 사용자가 사라져야 함), Josh의 좋은 반응을 수정하고 싶습니다.아마도 더 간단한 대안은 다음을 사용하여 관심 있는 당사자에게 통지하는 것입니다.$rootScope.$broadcast('loginStatusChanged', isLoggedIn);(1) (2) 이해관계자(통제관 등)는 다음을 사용하여 청취한다.$scope.$on('loginStatusChanged', function (event, isLoggedIn) { $scope.isLoggedIn = isLoggedIn; }.
(1)$rootScope서비스의 인수로 주입되다
(2) 비동기 로그인 조작의 경우 브로드캐스트가 변경되는 것을 Angular에 통지하는 것에 주의해 주십시오.$rootScope.$apply()기능.
사용자 콘텍스트를 모든 컨트롤러에서 유지하는 것에 대해 말하자면, 모든 컨트롤러에서 로그인 변경을 듣고 싶지 않을 수 있습니다.또한 최상위 로그인 컨트롤러에서만 듣고 다른 로그인 인식 컨트롤러를 이 컨트롤러의 하위 컨트롤러 또는 내장 컨트롤러로 추가하는 것을 선호할 수도 있습니다.이렇게 하면 하위 컨트롤러는 사용자 컨텍스트와 같은 상속된 상위 $scope 속성을 볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/14206492/how-do-i-store-a-current-user-context-in-angularjs
'programing' 카테고리의 다른 글
| Oracle 타임스탬프와 날짜 비교 (0) | 2023.03.15 |
|---|---|
| 실험 구문 'jsx'에 대한 Babel 던지기 지원이 현재 활성화되지 않았습니다. (0) | 2023.03.15 |
| Linux에서 SQL * PLUS 클라이언트를 설치하는 방법 (0) | 2023.03.15 |
| MongoDB: 설치된 MongoDB의 정확한 버전을 찾는 방법 (0) | 2023.03.10 |
| json 필드 유형 postgresql에서 null 값을 쿼리하는 방법 (0) | 2023.03.10 |