Как отследить события на трансляции $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, пожалуйста, проверьте эту ссылку