2016-11-06 105 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')) 
}) 

此代碼的工作原理。如果我的cookie發生變化,我會發出一個事件,從而觸發事件偵聽器,將$ scope.userWelcome的值更改爲存儲在cookie中的某個值。如果我在我的應用程序中導航到另一條路線,我會看到此更改。

但是,我想知道爲什麼我必須在這裏使用事件發射器?注意我註釋的那一行。我首先嚐試了這一點,但它並沒有改變$ 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