搜索

首页  >  问答  >  正文

angular.js - angular $scope.$on 接收事件重复执行

angular controller 之间通过事件传递值

页面每次刷新路由都会对视图 ui-view 进行刷新,

绑定在内的控制器

angular.controller('listCtrl',[])

会进行重载,(因为我把 listCtrl 控制器绑定到了视图内的标签上)

controller 内的

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

会记录 listCtrl 重载的次数,等接收到 testData 事件的时候,$on 会重复执行相应的次数。

我只想让 testData 执行一次,应该怎么做

给我你的怀抱给我你的怀抱2744 天前972

全部回复(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
  • 取消回复