2016-11-06 8 views
0

私はまだ角度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