创建自定义范围事件

与普通的 HTML 元素一样,$ scopes 可以拥有自己的事件。可以使用以下方式订阅$ scope 事件:

 $scope.$on('my-event', function(event, args) {
    console.log(args); // { custom: 'data' }
});

如果需要取消注册事件侦听器, $ on 函数将返回一个解除绑定的函数。继续上面的例子:

var unregisterMyEvent = $scope.$on('my-event', function(event, args) {
    console.log(args); // { custom: 'data' }
    unregisterMyEvent();
});

有两种方法可以触发你自己的自定义$ scope 事件 $ broadcast$ emit 。要通知父节点特定事件的范围,请使用 $ emit

$scope.$emit('my-event', { custom: 'data' }); 

上面的示例将在父作用域上触发 my-event 的任何事件侦听器,并且将继续将作用域树继续到 **$ rootScope,**除非侦听器在事件上调用 stopPropagation。只有使用 $ emit 触发的事件才可以调用 stopPropagation

$ emit 的反向是 $ broadcast ,它将触发作用域树中所有子作用域的任何事件侦听器,这些子作用域是调用 $ broadcast 的作用域的子级。

$scope.$broadcast('my-event', { custom: 'data' });

使用 $ broadcast 触发的事件无法取消。