使用 Angular 事件系统

$范围。$放出

使用 $scope.$emit 将通过范围层次结构向上触发事件名称并通知 $scope。事件生命周期从调用 $emit 的范围开始。

工作线框:

StackOverflow 文档

$范围。$广播

使用 $scope.$broadcast 将在 $scope 上发射一个事件。我们可以使用 $scope.$on 听这些事件

工作线框:

StackOverflow 文档

句法 :

// firing an event upwards
$scope.$emit('myCustomEvent', 'Data to send');

// firing an event downwards
$scope.$broadcast('myCustomEvent', {
  someProp: 'some value'
});

// listen for the event in the relevant $scope
$scope.$on('myCustomEvent', function (event, data) {
  console.log(data); // 'Data from the event'
});

而不是 $scope 你可以使用 $rootScope,在这种情况下你的事件将在所有控制器中可用,无论控制器范围如何

清理 AngularJS 中注册的活动

清理已注册事件的原因是因为即使控制器已经被破坏,注册事件的处理仍然存在。所以代码肯定会出乎意料。

// firing an event upwards
$rootScope.$emit('myEvent', 'Data to send');

// listening an event
var listenerEventHandler = $rootScope.$on('myEvent', function(){
    //handle code
});

$scope.$on('$destroy', function() {
    listenerEventHandler();
});