创建自定义范围事件
与普通的 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 触发的事件无法取消。