AngularJS - $ rootScope。$ on - 多次执行

时间:2018-02-06 12:02:57

标签: javascript angularjs angularjs-scope

在我的 $onInit() { this.$rootScope.$on('CANCELLED', (event) => { this.EventService.getEventsCurrentUser('own') .then((result) => { this.ownEvents = result }) }) } 中,我选择了传播事件:

.et_pb_button_module_wrapper{
    display: table-row; 
    height: 100px;
}
.et_pb_button_module_wrapper .a{    
    display: table-cell;
    vertical-align: middle;
    width: 200px;
    height: 100px;
    border: 1px solid #000;
    line-height: 1.2;
}

如何一次停止传播?

1 个答案:

答案 0 :(得分:1)

您需要"取消注册"通过调用return函数手动$rootScope个事件。您可以使用this.$onDestroy在组件生命周期中执行此操作。每次$rootScope执行时,$rootScope.$on()个事件会反复绑定。这就是你的事件被多次调用的原因。

var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl', function ($scope, $rootScope) {

  var registerScope = null;

  this.$onInit = function () {
    //register rootScope event
    registerScope = $rootScope.$on('CANCELLED', function(event) {
        console.log("fired");
    });
  }

  this.$onDestroy = function () {
    //unregister rootScope event by calling the return function
    registerScope();
  }
});

请同时查看此答案,以帮助您了解$rootScope$scope事件背后的逻辑: