Угловой $ destroy - стекирование - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть 2 контроллера, один из которых имеет функцию $ destroy для закрытия модели.

>  $scope.$on("$destroy", function() {
>        
>         var args = {};
>         $rootScope.$emit('refreshh', args);   
>     });

а в другом контроллере у меня

$rootScope.$on('refreshh', function(event, args) {
        console.log("modal closed");

    });

Когда я продолжаю открывать и закрывать модель, она работает нормально, я получаю «модальное закрытие», но затем, если я перехожу на другую страницу, например, из навигационной панели (без обновления страницы) и возвращаюсь на эту страницу, я буду тогда получить "модально закрыто" "модально закрыто", и если я повторю этот процесс, я получу "модально закрыто" "модально закрыто" "модально закрыто", как если бы код выполнялся X раз. Что бы это могло быть?

1 Ответ

0 голосов
/ 10 сентября 2018

Когда вы привязываете $on слушателя к $rootScope, и вы явно не уничтожаете этого слушателя ( см. Документы ), то каждый раз, когда создается ваш второй контроллер, он добавляет ДРУГОГО идентичного слушателя к $rootScope. В вашем втором контроллере вам либо нужно привязаться к локальному $scope, либо обязательно уничтожить слушателя, когда ваш второй контроллер уничтожен.

Второй контроллер:

var deregisterListener = $rootScope.$on('refreshh', function(event, args) {
  console.log("modal closed");
});


$scope.$on("destroy", function() {
  deregisterListener();
});

Без этого в конечном итоге $rootScope выдает слушателя каждый раз, когда вы создаете экземпляр второго контроллера, в результате чего все идентичные слушатели запускаются одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...