Angularjs $ транслируется один раз, $ на два раза

Он передает $broadcast один раз из rootScope, но слушатель ($on) вызывается дважды.

Слушатель находится в контроллере и использует $rootScope.$on вместо $scope.$on, У кого-нибудь была эта проблема?

редактировать

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);

другой контроллер:

$rootScope.$on('menuActivateActionPublish', function(event) {});

4 ответа

Решение

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

Вы должны создать свой слушатель в области видимости контроллера

$scope.$on('menuActivateActionPublish', function(event) {});

Будьте осторожны, чтобы избежать двух экземпляров контроллера, значит два слушателя событий, что означает, что метод выполняется дважды!! (пример: использование дважды 'ng-controller')

Чтобы дополнить que1326, ответьте, например, если вы используете ui-router и имеете что-то вроде

.state('app.yourpage', {
            url:'yourPage',
            views: {
                'content@': {
                    templateUrl : 'views/yourPage.html',
                    controller  : 'YourController'
                }
            }
        })

и в yourPage.html у вас есть ng-controller="YourController as Ctrl"Затем вы создаете 2 экземпляра контроллера: 1 экземпляр создается конфигурацией состояния, а другой - в вашем html.

Единственное решение, которое я смог получить, - создать прослушиватель внутри события $viewContentLoaded:

$scope.$on('$viewContentLoaded', function() {
  //Put your listener(s) in here
  $scope.$on('menuActivateActionPublish', function(event) {});
});
Другие вопросы по тегам