1

我正在使用角度计时器,我只是有点困惑如何跟踪它的事件。例如,我想在时间到后做某事,但我在控制台日志上看不到任何事件。

  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

4

2 回答 2

1

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

标记

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

否则想$scope在您的控制器中使用,然后只需将方法更改$scope.add20Secondsvm.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在使用之前在控制器中包含依赖项。

于 2015-09-12T09:52:26.563 回答
0

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

于 2015-09-12T10:08:49.980 回答