簡體   English   中英

$ rootScope。$ watch觸發了兩次

[英]$rootScope.$watch triggered twice

一旦變量newChat被改變,我想觸發一個新的聊天,如下所示:

$rootScope.newChat = {
  roomId: roomId,
  friendId: friendId
};

在我的ChatController$watch這個變量:

$rootScope.$watch('newChat', function (data) { /*do stuff*/ }

在第一次重新加載頁面后,這可以在我的頁面上運行,沒有任何問題。 但是對於第一次加載,這個$watch會被觸發兩次,這會導致聊天的其他部分出現問題。

我檢查了newChat的值。 這兩次的價值完全相同。 我的應用程序的其他任何部分都沒有使用$rootScope.newChat變量

為什么這樣,我該如何解決這個問題?

$ digest循環運行時,每個手表都會被觸發。 您需要做的是檢查新值與舊值。

$rootScope.$watch('newChat', function (newValue, oldValue) {
    if(newValue !== oldValue){
        /*do stuff*/
    }
});

我這樣解決了這個問題

$rootScope.$watch('someValue', function (){
                /* rewrite into a new scope */
                $scope.someValue = $rootScope.someValue;
            });
 $scope.$watch('someValue', function (){/*To do*/});

暫無
暫無

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

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