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

时间:2015-09-12 09:40:27

标签: angularjs broadcast angular-broadcast

我正在使用角度计时器,我对如何跟踪其事件感到有些困惑。例如,我希望在时间结束后做一些事情,但我无法在控制台日志中看到任何事件。

  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

2 个答案:

答案 0 :(得分:1)

由于链接中给出的代码似乎没有更新,我认为您将其更改为使用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
});
  

在使用之前在控制器中包含$timeout依赖项。

答案 1 :(得分:0)

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