日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

angularjs $watch

發布時間:2025/3/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 angularjs $watch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

$watch

監視的作用就是在被監視對象發生變化的時候觸發其他的動作,這在某些場景下很有用

$watch 單一的變量

對于普通的變量時,如數字,字符串等,直接如下寫是可以監視到變量的變化,并執行相應的函數的。

$scope.count=1; $scope.$watch('count',function(){ ... });

$watch 多個變量

對于多個變量的監視變化,執行同一函數的話,可以將這幾個變量轉為字符串,以‘+’號隔開來進行監視

//當count或page變化時,都會執行這個匿名函數 $scope.count=1; $scope.page=1; $scope.$watch('count + page',function(){ ... });

$watch對象或數組

發現用上面兩種方法去監視數組時,會發現即使數組的內容改變了,也沒有觸發到這個匿名函數。之后發現watch函數其實是有三個變量的,第一個參數是需要監視的對象,第二個參數是在監視對象發生變化時需要調用的函數,實際上watch還有第三個參數,它在默認情況下是false。
當第三個參數是false時,其實watch函數監視的是數組的地址,而數組的內容的變化不會影響數組地址的變化,所以watch函數失靈了。
解決辦法,就是在后面添加第三個參數為true就好(當然,也可以將這監聽返回結果為JSON字符串形式的該對象或數組的的匿名函數。)

$scope.items=[ {a:1}, {a:2} {a:3}]; $scope.$watch('items',function(){...},true);

或者將監聽返回結果為JSON字符串形式的該對象或數組的的匿名函數

$scope.items=[ {a:1}, {a:2} {a:3}]; $scope.$watch(function(){return JSON.stringify($scope.items); },function(){...});

$watch 函數的返回結果

在寫代碼的時候,有時會遇到要監視一個函數返回的結果是否變化的情況,所以查了一下$watch 監視函數的情況。

方法1:監視對象為“函數名()”的字符串,記得加“()”!
js //未完成的任務個數 $scope.unDoneCount = function() { var count = 0; angular.forEach($scope.todoList, function(todo) { count += todo.done ? 0 : 1; }); return count; }; //單選影響全選部分 $scope.$watch('unDoneCount()', function(nv) { $scope.isDoneAll = nv ? false : true; });js
方法2:在監視對象中設置為匿名函數,返回要監視的函數的返回值(繞暈了…)

$scope.$watch(function(){return $scope.unDoneCount();//不要忘了(),要執行的啊~ }, function(nv) {$scope.isDoneAll = nv ? false : true; });

取消$watch

watch的性能消耗好像蠻大的,所以對于已經不需要監視的watch,記得定時取消掉。
至于怎么取消了…查了好久才找到的
其實每個watch函數返回的結果就是這個watch的deregisterWatch()函數

//在chrome的控制臺上,斷點得到的$watch的返回值 function deregisterWatch() {arrayRemove(array, watcher);lastDirtyWatch = null; }

所以啊,要取消watch的話,一開始將$watch的返回值保存就好啦,要取消watch的時候,在調用。

var count=1; var unbingWatch=$scope.$watch('todoList',function(){console.log('todoList change');count++;//相當于在todoList變化了4次之后,就調用unbingWatch()取消這個watch//在第5次todoList改變的時候,就不會輸出todoList change了。if(count>4){unbingWatch();} });



原文:關于angularJS的$watch的 一些小用法

轉載于:https://www.cnblogs.com/wancy86/p/7016009.html

總結

以上是生活随笔為你收集整理的angularjs $watch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。