Как отследить события на трансляции $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

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 зависимость в вашем контроллере перед его использованием.

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

Другие вопросы по тегам