Как отслеживать события в трансляции $scope.$?

Я использую 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


person Croaton    schedule 12.09.2015    source источник


Ответы (2)


Поскольку код, указанный в ссылке, похоже, не обновляется, я думаю, вы изменили его, чтобы использовать синтаксис 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 в свой контроллер перед его использованием.

person Pankaj Parkar    schedule 12.09.2015
comment
Да, я знаю. Добавление секунд работает. Я хочу реализовать обратный вызов по истечении времени, но я не вижу никаких событий в трансляции «timer-add-cd-seconds». - person Croaton; 12.09.2015
comment
@VitalyFry Ваш вопрос выглядит сбивающим с толку, пожалуйста, обновите его ... для вашего беспокойства вы должны использовать $timeout/$interval - person Pankaj Parkar; 12.09.2015

если вы ищете хорошую статью об использовании дерева области видимости в качестве механизма публикации и подписки (Pub/Sub) в angularJS, пожалуйста, проверьте это ссылка

person macrog    schedule 12.09.2015