2016-11-06 63 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