angular controller
之間通過(guò)事件傳遞值
頁(yè)面每次刷新路由都會(huì)對(duì)視圖 ui-view
進(jìn)行刷新,
綁定在內(nèi)的控制器
angular.controller('listCtrl',[])
會(huì)進(jìn)行重載,(因?yàn)槲野?listCtrl
控制器綁定到了視圖內(nèi)的標(biāo)簽上)
controller
內(nèi)的
$scope.$on('testData',function(ev,data){
//
})
會(huì)記錄 listCtrl
重載的次數(shù),等接收到 testData
事件的時(shí)候,$on
會(huì)重復(fù)執(zhí)行相應(yīng)的次數(shù)。
我只想讓 testData
執(zhí)行一次,應(yīng)該怎么做
謝邀, 寫(xiě)一個(gè) service 或在 $rootScope 上掛一個(gè)全局變量
if(!$rootScope.isInvoked) {
var unbindHandler = $scope.$on('testData', function(evt, data) {
//執(zhí)行完成后就把該事件解綁
unbindHandler();
$rootScope.isInvoked = true;
});
}
當(dāng)然,關(guān)于事件訂閱與發(fā)送這塊如果不是像路由這種需要通知所有scope的情況,建議不要使用AngularJS自帶的事件機(jī)制,建議自己寫(xiě)一個(gè)EventBus服務(wù)去處理。因?yàn)锳ngularJS的事件機(jī)制需要遍歷整個(gè)scope樹(shù),性能一般。
推薦一篇我們團(tuán)隊(duì)內(nèi)部的總結(jié):
https://github.com/ShuyunXIAN...