成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

gclove / 3736人閱讀

摘要:因?yàn)樵谏系囊坏┳?cè)全局有效。而我的這個(gè)全局變量恰好是訂單信息,也就是說不同的對(duì)他都是有改動(dòng)的,每一次改動(dòng)就會(huì)觸發(fā)進(jìn)入別的??梢灶惐瓤匆幌律系臅?huì)全局出發(fā)的。例如手動(dòng)清除還是很簡(jiǎn)單對(duì)吧,以上方法同樣可以用于上的。

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

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

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

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

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

邏輯如圖,一開始我使用了 $rootScope.$watch 的寫法。因?yàn)?angularjs 在 $rootScope 上的 watch 一旦注冊(cè)全局有效。而我的這個(gè)全局變量恰好是訂單信息,也就是說不同的 controller 對(duì)他都是有改動(dòng)的,每一次改動(dòng)就會(huì)觸發(fā) $rootScope.$watch 進(jìn)入別的 controller。可以類比看一下 $rootScope 上的 $broadcast 會(huì)全局出發(fā)的。

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

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

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

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

還是很簡(jiǎn)單對(duì)吧,以上方法同樣可以用于 scope 上的 watch。

研究到這里的時(shí)候,覺得有點(diǎn)問題,那我在 $scope 會(huì)被清理么?于是呼,繼續(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 = {};

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78630.html

相關(guān)文章

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

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

    forsigner 評(píng)論0 收藏0
  • AngularJs

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

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

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

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

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

    wind5o 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<