建立自定義範圍事件

與普通的 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 觸發的事件無法取消。