Остановите прослушиватели событий на '$destroy'. Ошибка типа: $on не является функцией;
Я пытаюсь остановить всех слушателей событий, пока область действия уничтожена.
Я получаю эту ошибку:
TypeError: vm.$on is not a function;
Ни vm.on(..) не работает
angular.module('app.layout')
.controller('DashboardController', DashboardController);
DashboardController.$inject = ['$interval','dataservice'];
function DashboardController($interval, dataservice) {
var vm = this;
vm.name = "DashboardController";
console.log('Init Dashboard Controller');
initEvents();
/*
...
*/
/////////////////////////////
function initEvents() {
vm.$on('$destroy', function() {
vm.stop();
console.log('DashboardController scope destroyed.');
})
}
1 ответ
Проблема в том, что vm
не имеет $on(...
заявлено, вы должны использовать $scope
вместо. Введите его на свой контроллер и объявить как $scope.$on
,
Когда используешь controllerAs
синтаксис, это очень часто неправильно понимают, что вы не должны использовать $scope
совсем. Тем не менее, рекомендуется избегать использования $scope
для определенных действий не отмените это от своего диспетчера. Scope всегда будет существовать, это внутренний элемент вашего контроллера, просто не используйте его как модель представления, но вы можете использовать его в любом случае для таких задач, как прослушивание событий, трансляция, передача и т. Д.
Попробуйте что-то вроде (после того, как вы ввели $scope
на ваших зависимостях):
$scope.$on('$destroy', function() {
vm.stop();
console.log('DashboardController scope destroyed.');
})