Остановите прослушиватели событий на '$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.');
})
Другие вопросы по тегам