【问题标题】:How to track events on $scope.$broadcast?如何跟踪 $scope.$broadcast 上的事件?
【发布时间】:2015-12-08 20:01:23
【问题描述】:

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

  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

【问题讨论】:

    标签: angularjs broadcast angular-broadcast


    【解决方案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 依赖项。

    【讨论】:

    • 是的,我知道。添加秒是有效的。我想在时间到后实现回调,但在“timer-add-cd-seconds”广播中看不到任何事件。
    • @VitalyFry 您的问题看起来令人困惑,请更新它..对于您的关注,您应该使用$timeout/$interval
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2015-01-17
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多