国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

angularjs 某個作用域監聽全局變量的正確姿勢

gclove / 3668人閱讀

摘要:因為在上的一旦注冊全局有效。而我的這個全局變量恰好是訂單信息,也就是說不同的對他都是有改動的,每一次改動就會觸發進入別的。可以類比看一下上的會全局出發的。例如手動清除還是很簡單對吧,以上方法同樣可以用于上的。

如果你只想知道結論:

$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 對他都是有改動的,每一次改動就會觸發 $rootScope.$watch 進入別的 controller。可以類比看一下 $rootScope 上的 $broadcast 會全局出發的。

其實這并不是唯一的方式,查一下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 會被清理么?于是呼,繼續翻源碼,我在 $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 = {};

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78630.html

相關文章

  • 【轉】angularJS兄弟controller之間如何正確通信

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

    forsigner 評論0 收藏0
  • AngularJs

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

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

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

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

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

    wind5o 評論0 收藏0

發表評論

0條評論

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