angularjs之事件綁定、解除事件綁定


今天在開發時,遇到一個坑,花了一下午時間也沒找到原因,無奈小菜鳥只能尋求公司里大牛的幫助,果然,大牛就是大牛,對比了幾個輸出結果,就看出問題所在。所以小菜鳥當然不會錯過這個分享的時機啦~廢話不多說進入正題:

在angular開發時,會把整體分解成各個功能塊,然后使用自定義指令directive或者service或者factory,總之想盡辦法再給組合在一起,所以問題來了~

比如:往一個頁面添加元素(按鈕?等等),此時點擊添加的按鈕在directive1里,而元素的添加又在directive2里,所以要怎么通訊呢,我選擇了事件的方式:

directive1  有代碼如下:

$scope.insertWidget = function(type){
  $rootScope.$emit("widget.insert",type);
};

directive2 有代碼如下:

$rootScope.$on("widget.insert",function($event,type){
  //功能代碼
});

當然這是有問題的。

當directive2里的scope被destroy的時候,它綁定的事件並沒有解除,因為綁定在$rootScope下了,所以當我再次操作時,事件會累加,導致再次刷新該頁面的時候,widget.insert事件累積了兩次,(以此累積)。

在我今天要完成的功能里就造成了影響,因為我是每添加一個元素會有$modal.open的操作,所以這樣我去關閉這個modal會累積關閉幾個,如果不解除的話。

所以解決方法是:

  $on事件會返回一個函數,只要在當前scope被destroy時,執行這個函數就好了~見代碼:

    var destroyInsert = $rootScope.$on("widget.insert",function($event,type){
      //功能代碼
    });

    $scope.$on("$destroy",function(){
      destroyInsert();
    });

今天遇到的這個坑就解決啦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM