簡體   English   中英

角度$ scope與$ watch的混淆

[英]Angular $scope confusion with $watch

我仍處於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的值。 我必須重新加載頁面才能看到我已登錄。

這里發生了什么?

您的錯誤是您嘗試使用標准方法獲得新的價值。 實際獲得新值的方法是將其添加到函數的參數中。 它去了:

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

干杯!

嘗試直接查看Cookie:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM