2016-11-06 5 views
0

저는 Angular 1.0 여행의 초기 단계에 있습니다. 나는 그것을 좋아하는 것을 배우고있다. 그러나 나는 아직도 약간의 장소에서 나의 머리를 긁고있다.

최근에 나는 $ watch를 사용하면서 뭔가 혼란에 빠졌습니다. 보십시오 :

$scope.$watch('cookies', function() { 
    if ($cookies.getAll().redditSession) { 
    $scope.$emit('cookiesChanged') 
// $scope.userWelcome = cookieService.decodeCookie($cookies.get('redditSession')) 
    } 
}) 

$scope.$on('cookiesChanged', function() { 
    $scope.userWelcome = cookieService.decodeCookie($cookies.get('redditSession')) 
}) 

이 코드는 작동합니다. 쿠키가 변경되면 이벤트를 발생시켜 이벤트 리스너를 트리거하여 $ scope.userWelcome의 값을 쿠키에 저장된 값으로 변경합니다. 내 앱에서 다른 경로를 탐색하면이 변경 사항이 표시됩니다.

그러나 여기 왜 이벤트 이미 터를 사용해야하는지 궁금합니다. 내가 주석 처리 한 행을 주목하십시오. 먼저 시도했지만, $ scope.userWelcome의 값은 변경되지 않습니다. 앱에서 다른 페이지로 이동할 경우에도 마찬가지입니다. 로그인 한 페이지를 다시로드해야합니다.

어떻게 된거 야?

+0

이 조각 모두의 외부 환경은 무엇입니까? 그들은 같은 컨트롤러에 있습니까? – charlietfl

+0

네, 같은 컨트롤러에 둘 다 – jamesfreeman

답변

0

직접 쿠키를보고하십시오 :

$scope.$watch(
    function() { 
     return $cookies.get('redditSession'); 
    }, 
    function (newValue) { 
     if (newValue) { 
      $scope.userWelcome = cookieService.decodeCookie(newValue); 
     }; 
    } 
); 
+0

조지, 매우 도움이 됨). – jamesfreeman

0

실수로 표준 방법으로 새 ​​값을 얻으려고합니다. 실제로 새로운 값을 얻는 방법은 함수의 매개 변수에 추가하는 것입니다. 여기에 간다 :

$scope.$watch('cookies', function(newValue, oldValue) { 
    if (newValue.getAll().redditSession) { 
    $scope.userWelcome = cookieService.decodeCookie(newValue.get('redditSession')) 
    } 
    // also try this 
    console.log(oldvalue === $cookies); 
}); 

건배!

+0

승낙, 고마워요! 매개 변수가 어떻게 작동했는지, 또는 매개 변수가 필요한지 전혀 이해하지 못했습니다. – jamesfreeman

+0

@jamesfreeman이 답변으로 도움이 되었으면 받아 들여 다른 사람들도 볼 수 있습니다 (: – victor175