成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

angularjs 某個作用域監(jiān)聽全局變量的正確姿勢

gclove / 3680人閱讀

摘要:因為在上的一旦注冊全局有效。而我的這個全局變量恰好是訂單信息,也就是說不同的對他都是有改動的,每一次改動就會觸發(fā)進入別的??梢灶惐瓤匆幌律系臅殖霭l(fā)的。例如手動清除還是很簡單對吧,以上方法同樣可以用于上的。

如果你只想知道結(jié)論:

$scope.$watch(function(){$rootScope.xxx;},function(newVal,oldVal){
    //do something
})

馬上就有人問為什么不是:

$rootScope.$watch("xxx",function(newVal,oldVal){
  //do something
})

從我最近的一個bug來說說為什么要用第一種方式。

邏輯如圖,一開始我使用了 $rootScope.$watch 的寫法。因為 angularjs 在 $rootScope 上的 watch 一旦注冊全局有效。而我的這個全局變量恰好是訂單信息,也就是說不同的 controller 對他都是有改動的,每一次改動就會觸發(fā) $rootScope.$watch 進入別的 controller??梢灶惐瓤匆幌?$rootScope 上的 $broadcast 會全局出發(fā)的。

其實這并不是唯一的方式,查一下angular 源碼不難找到 watch 方法源碼不分有如下代碼:

return function deregisterWatch() {
  if (arrayRemove(array, watcher) >= 0) {
      incrementWatchersCount(scope, -1);
  }
  lastDirtyWatch = null;
};

這段代碼告訴我們,手動清理 watch 是可行的。例如:

var watcher = $rootScope.$watch("xxx",function(){});
//手動清除 watcher 
watcher();

還是很簡單對吧,以上方法同樣可以用于 scope 上的 watch。

研究到這里的時候,覺得有點問題,那我在 $scope 會被清理么?于是呼,繼續(xù)翻源碼,我在 $destroy 方法里面找到如下代碼:

// Disable listeners, watchers and apply/digest methods
this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
this.$on = this.$watch = this.$watchGroup = function() { 
  return noop; 
};
this.$$listeners = {};

以上代碼分析很有可能有錯,僅做參考,如有錯誤歡迎指正。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78630.html

相關(guān)文章

  • 【轉(zhuǎn)】angularJS兄弟controller之間如何正確通信

    摘要:每個的指向指向父級作用域。之間的通信本質(zhì)上是當前的所在的如何跟其他上的進行通信。傳遞事件有種方式觸發(fā)的事件要通知整個事件系統(tǒng)允許任意作用域處理這個事件就要向下傳播。作用域上使用進行事件監(jiān)聽。示例關(guān)于同級之間通信我的一個提問 原文鏈接:http://www.cnblogs.com/webbes... AngularJS中的controller是個函數(shù),用來向視圖的作用域($scope)添...

    forsigner 評論0 收藏0
  • AngularJs

    摘要:當左右服務(wù)都被解析并返回時,會以服務(wù)為參數(shù)去調(diào)用組件的構(gòu)造函數(shù)。發(fā)送或廣播的消息應(yīng)該限定在最小的作用域。置頂一個通過,發(fā)送的消息列表并且窒息的管理以防止命名沖突在需要格式化數(shù)據(jù)時,將格式 angular 數(shù)據(jù)雙向綁定的框架 提供數(shù)據(jù)綁定,DOM指令。angular,定義了一套規(guī)則,開發(fā)中就必須遵守規(guī)則,這套規(guī)則為項目提供了一套解決方案。 模塊,組件,模板,元數(shù)據(jù),數(shù)據(jù)綁定, 指令,服務(wù)...

    sf190404 評論0 收藏0
  • angularJS開發(fā)注意事項匯總

    摘要:作為一個應(yīng)該具有經(jīng)??偨Y(jié)反思的習(xí)慣如果不能及時總結(jié)可能就會忘記自己踩過的很多坑然后會導(dǎo)致同一個坑踩很多次所以我打算把這些都記錄下來以方便是對自己的重復(fù)記憶避免無效的另一方面可以希望可以給遇到相似問題的同僚們一些收獲手動觸發(fā)臟檢查在開發(fā)過程中 作為一個coder,應(yīng)該具有經(jīng)常總結(jié)反思的習(xí)慣,如果不能及時總結(jié),可能就會忘記自己踩過的很多坑,然后會導(dǎo)致同一個坑踩很多次,所以我打算把這些都記錄...

    Null 評論0 收藏0
  • 【譯】《精通使用AngularJS開發(fā)Web App》(三)--- 深入scope,繼承結(jié)構(gòu),事件系

    摘要:比如,我們可以監(jiān)聽事件由實例發(fā)出,然后在任何瀏覽器中就是變化的時候都會得到通知,如下所示每一個作用域?qū)ο蠖紩羞@個方法,可以用來注冊一個作用域事件的偵聽器。這個函數(shù)所扮演的偵聽器在被調(diào)用時會有一個對象作為第一個參數(shù)。 上一篇:【譯】《精通使用AngularJS開發(fā)Web App》(二) 下一篇:【譯】《精通使用AngularJS開發(fā)Web App》(四) 書名:Mastering W...

    wind5o 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<