欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談angularJS的$watch失效問題的解決方案

 更新時間:2017年08月11日 17:12:28   作者:就叫我上帝吧  
本篇文章主要介紹了淺談angularJS的$watch失效問題的解決方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

本文介紹了淺談angularJS的$watch失效問題的解決方案,分享給大家,順便給自己留個筆記

$watch方法,它可以幫助我們在每個scope中監(jiān)視其中的變量。

$watch 單一的變量

對于普通的變量時,如數(shù)字,字符串等,直接如下寫是可以監(jiān)視到變量的變化,并執(zhí)行相應(yīng)的函數(shù)的。

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

$watch 多個變量

對于多個變量的監(jiān)視變化,執(zhí)行同一函數(shù)的話,可以將這幾個變量轉(zhuǎn)為字符串,以‘+'號隔開來進行監(jiān)視

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

$watch對象或數(shù)組

發(fā)現(xiàn)用上面兩種方法去監(jiān)視數(shù)組時,會發(fā)現(xiàn)即使數(shù)組的內(nèi)容改變了,也沒有觸發(fā)到這個匿名函數(shù)。之后發(fā)現(xiàn)watch函數(shù)其實是有三個變量的,第一個參數(shù)是需要監(jiān)視的對象,第二個參數(shù)是在監(jiān)視對象發(fā)生變化時需要調(diào)用的函數(shù),實際上watch還有第三個參數(shù),它在默認(rèn)情況下是false。

當(dāng)?shù)谌齻€參數(shù)是false時,其實watch函數(shù)監(jiān)視的是數(shù)組的地址,而數(shù)組的內(nèi)容的變化不會影響數(shù)組地址的變化,所以watch函數(shù)失靈了。

解決辦法,就是在后面添加第三個參數(shù)為true就好(當(dāng)然,也可以將這監(jiān)聽返回結(jié)果為JSON字符串形式的該對象或數(shù)組的的匿名函數(shù)。)

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

或者將監(jiān)聽返回結(jié)果為JSON字符串形式的該對象或數(shù)組的的匿名函數(shù)

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

$watch 函數(shù)的返回結(jié)果

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

方法1:監(jiān)視對象為“函數(shù)名()”的字符串,記得加“()”!

//未完成的任務(wù)個數(shù)
$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;
});

方法2:在監(jiān)視對象中設(shè)置為匿名函數(shù),返回要監(jiān)視的函數(shù)的返回值(繞暈了…)

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

取消$watch

watch的性能消耗好像蠻大的,所以對于已經(jīng)不需要監(jiān)視的watch,記得定時取消掉。

至于怎么取消了…查了好久才找到的

其實每個watch函數(shù)返回的結(jié)果就是這個watch的deregisterWatch()函數(shù)

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • AngularJS對動態(tài)增加的DOM實現(xiàn)ng-keyup事件示例

    AngularJS對動態(tài)增加的DOM實現(xiàn)ng-keyup事件示例

    這篇文章主要介紹了AngularJS對動態(tài)增加的DOM實現(xiàn)ng-keyup事件示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解如何構(gòu)建一個Angular6的第三方npm包

    詳解如何構(gòu)建一個Angular6的第三方npm包

    這篇文章主要介紹了詳解如何構(gòu)建一個Angular6的第三方npm包,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Angular ng-animate和ng-cookies用法詳解

    Angular ng-animate和ng-cookies用法詳解

    本文講一下Angular中動畫應(yīng)用的部分。這篇文章主要介紹了Angular ng-animate和ng-cookies用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Angular4學(xué)習(xí)筆記之根模塊與Ng模塊

    Angular4學(xué)習(xí)筆記之根模塊與Ng模塊

    這篇文章主要介紹了Angular4學(xué)習(xí)筆記之根模塊與Ng模塊,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Angularjs的Controller間通信機制實例分析

    Angularjs的Controller間通信機制實例分析

    這篇文章主要介紹了Angularjs的Controller間通信機制,結(jié)合實例形式分析了Controller通信機制的原理、實現(xiàn)技巧與相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11
  • Angular8升級至Angular13遇到的問題解決

    Angular8升級至Angular13遇到的問題解決

    這幾天升級公司的一個Angular項目遇到了一些問題,下面這篇文章主要給大家介紹了關(guān)于Angular8升級至Angular13遇到的問題解決,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • AngularJS中ng-options實現(xiàn)下拉列表的數(shù)據(jù)綁定方法

    AngularJS中ng-options實現(xiàn)下拉列表的數(shù)據(jù)綁定方法

    今天小編就為大家分享一篇AngularJS中ng-options實現(xiàn)下拉列表的數(shù)據(jù)綁定方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • AngularJS 中文API參考手冊

    AngularJS 中文API參考手冊

    本文主要介紹AngularJS API,這里對AngularJS的指令,事件,全局API等做中文翻譯,希望能幫助有需要的小伙伴
    2016-07-07
  • Angular實現(xiàn)表單驗證功能

    Angular實現(xiàn)表單驗證功能

    這篇文章主要為大家詳細(xì)介紹了Angular實現(xiàn)表單驗證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Angular2管道Pipe及自定義管道格式數(shù)據(jù)用法實例分析

    Angular2管道Pipe及自定義管道格式數(shù)據(jù)用法實例分析

    這篇文章主要介紹了Angular2管道Pipe及自定義管道格式數(shù)據(jù)用法,結(jié)合實例形式詳細(xì)分析了Angular2管道與純管道相關(guān)概念、語法及使用技巧,需要的朋友可以參考下
    2017-11-11

最新評論