如何跟踪 $scope.$broadcast 上的事件?

How to track events on $scope.$broadcast?

我正在使用 angular-timer,但我对如何跟踪它的事件有点困惑。例如,我想在时间结束后做一些事情,但是我在控制台日志上看不到任何事件。

  vm.add20Seconds = function() {
    $scope.$broadcast('timer-add-cd-seconds', 20);
  }

  $scope.$on('timer-add-cd-seconds', function (event, data) {
    console.log(data); // 'Some data'
  });

控制台是空的。

https://github.com/siddii/angular-timer/blob/master/examples/angularjs-add-countdown-seconds.html

由于 link 中给出的代码似乎没有更新,我认为您将其更改为使用 controllerAs 语法。因此,您的 button html 将在调用控制器方法时使用 vm 别名。假设您使用 ng-controller="MyAppController as vm"

标记

<button type="button" ng-click="vm.add20Seconds()">Add 20 Seconds</button>

否则想在控制器中使用 $scope 然后只需将方法更改为 $scope.add20Seconds 而不是 vm.add20Seconds

更新

要在 20 秒后调用函数,您可以在此处使用 $timeout 服务,该服务将在提及 $timeout 完成时调用并指定回调。

代码

vm.add20Seconds = function() {
   $scope.$broadcast('timer-add-cd-seconds', 20);
}

var myCallbackAfterTimeout = function(){
   //add your code.
}

$scope.$on('timer-add-cd-seconds', function (event, data) {
 console.log(data); // 'Some data'
 $timeout(myCallbackAfterTimeout, data); //data is nothing but timeout milliseconds
});

Include $timeout dependency in your controller before using it.

如果您正在寻找一篇关于在 angularJS 中使用范围树作为发布和订阅 (Pub/Sub) 机制的好文章,请查看此 link