搜尋

首頁  >  問答  >  主體

angular.js - angular $scope.$on 接收事件重複執行

angular controller 之間透過事件傳遞值

頁面每次刷新路由都會對視圖 ui-view 進行刷新,

綁定在內的控制器

angular.controller('listCtrl',[])

會進行重載,(因為我把 listCtrl 控制器綁定到了視圖內的標籤上)

controller 內的

$scope.$on('testData',function(ev,data){
 //
})

會記錄 listCtrl 重載的次數,等接收到 testData 事件的時候,$on 會重複執行對應的次數。

我只想讓 testData 執行一次,我應該怎麼做

给我你的怀抱给我你的怀抱2799 天前1022

全部回覆(1)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 17:07:58

    謝邀, 寫一個 service 或在 $rootScope 上掛一個全域變數

    if(!$rootScope.isInvoked) {
        var unbindHandler = $scope.$on('testData', function(evt, data) {
            //执行完成后就把该事件解绑 
            unbindHandler();
            $rootScope.isInvoked = true;
        });
    }

    當然,關於事件訂閱與發送這塊如果不是像路由這種需要通知所有scope的情況,建議不要使用AngularJS自帶的事件機制,建議自己寫一個EventBus服務去處理。因為AngularJS的事件機制需要遍歷整個scope樹,所以性能一般。

    推薦一篇我們團隊內部的總結:
    https://github.com/ShuyunXIAN...

    回覆
    0
  • 取消回覆