使用 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();
});