Heim > Fragen und Antworten > Hauptteil
angular controller
之间通过事件传递值
页面每次刷新路由都会对视图 ui-view
进行刷新,
绑定在内的控制器
angular.controller('listCtrl',[])
会进行重载,(因为我把 listCtrl
控制器绑定到了视图内的标签上)
controller
内的
$scope.$on('testData',function(ev,data){
//
})
会记录 listCtrl
重载的次数,等接收到 testData
事件的时候,$on
会重复执行相应的次数。
我只想让 testData
执行一次,应该怎么做
曾经蜡笔没有小新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...