摘要:因為在上的一旦注冊全局有效。而我的這個全局變量恰好是訂單信息,也就是說不同的對他都是有改動的,每一次改動就會觸發(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
摘要:每個的指向指向父級作用域。之間的通信本質(zhì)上是當前的所在的如何跟其他上的進行通信。傳遞事件有種方式觸發(fā)的事件要通知整個事件系統(tǒng)允許任意作用域處理這個事件就要向下傳播。作用域上使用進行事件監(jiān)聽。示例關(guān)于同級之間通信我的一個提問 原文鏈接:http://www.cnblogs.com/webbes... AngularJS中的controller是個函數(shù),用來向視圖的作用域($scope)添...
摘要:當左右服務(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ù)...
摘要:作為一個應(yīng)該具有經(jīng)??偨Y(jié)反思的習(xí)慣如果不能及時總結(jié)可能就會忘記自己踩過的很多坑然后會導(dǎo)致同一個坑踩很多次所以我打算把這些都記錄下來以方便是對自己的重復(fù)記憶避免無效的另一方面可以希望可以給遇到相似問題的同僚們一些收獲手動觸發(fā)臟檢查在開發(fā)過程中 作為一個coder,應(yīng)該具有經(jīng)常總結(jié)反思的習(xí)慣,如果不能及時總結(jié),可能就會忘記自己踩過的很多坑,然后會導(dǎo)致同一個坑踩很多次,所以我打算把這些都記錄...
摘要:比如,我們可以監(jiān)聽事件由實例發(fā)出,然后在任何瀏覽器中就是變化的時候都會得到通知,如下所示每一個作用域?qū)ο蠖紩羞@個方法,可以用來注冊一個作用域事件的偵聽器。這個函數(shù)所扮演的偵聽器在被調(diào)用時會有一個對象作為第一個參數(shù)。 上一篇:【譯】《精通使用AngularJS開發(fā)Web App》(二) 下一篇:【譯】《精通使用AngularJS開發(fā)Web App》(四) 書名:Mastering W...
閱讀 2856·2023-04-26 01:02
閱讀 1884·2021-11-17 09:38
閱讀 808·2021-09-22 15:54
閱讀 2912·2021-09-22 15:29
閱讀 903·2021-09-22 10:02
閱讀 3456·2019-08-30 15:54
閱讀 2021·2019-08-30 15:44
閱讀 1607·2019-08-26 13:46