2015-06-22 4 views
0

в app.js, я использую функцию обратного вызова, переданную на $ rootScope, чтобы получить уволенный метод на втором контроллере.AngularJS: Как избежать - широковещательное событие, вызванное из app.js, запускается дважды?

function onSuccess(state) { 
      if (state != true) { 
      } else { 
       $rootScope.$broadcast('proximityCatched', null); 
      } 
      //console.log('Proximity state: ' + (state ? 'near' : 'far')); 
     }; 

На контроллере у меня есть слушатель:

$rootScope.$on('proximityCatched', function() { 
      alert("TEST"); 
     }); 

Проблема заключается в том, что предупреждение ("TEST"); запускается дважды.

Я попытался найти любое рабочее решение, используя stopPropagation или используя широковещательную рассылку в обычном режиме, но без везения.

Как я могу это сделать правильно?

Спасибо за любой совет.

Edit: конфигурации маршрутизатора:

.config(function($stateProvider, $urlRouterProvider) { 
     $stateProvider 
      .state('game', { 
       url: "/game", 
       templateUrl: "templates/game.html", 
       controller: "GameCtrl" 
      }) 
      .state('home', { 
       url: "/home", 
       templateUrl: "templates/home.html", 
       controller: "HomeCtrl" 
      }) 
     // if none of the above states are matched, use this as the fallback 
     $urlRouterProvider.otherwise('/home'); 
    }); 
+0

Вы подключаете контроллер дважды в маршрут и html? –

+0

Вы думаете, маршрутизатор, который я только что поставил под вопрос? Контроллеры упоминаются здесь, в index.html и в ng-init – redrom

+0

ok Вы используете 'ng-controller' в html? –

ответ

1

Если вы подключаете контроллер дважды он будет вызывать дважды.

проверка если вы прикрепляете контроллер в routes конфигурациях и html (используя ng-controller), если вы прикрепляете дважды (используя оба способа), пожалуйста, удалите один.

cheerz

+0

Я думал, что контроллер должен быть определен в index.html, и если он должен быть прикреплен к какому-либо шаблону (view), должен быть определен и в маршрутах. Удаление атрибута ng-controller из представлений решило мою проблему. – redrom

+0

umm nope в основном контроллер, назначенный для представления, и он будет контролировать поведение этого содержимого html. если у вас несколько видов, тогда для их обработки должно быть несколько контроллеров, и вы можете определить контроллер в конфигурации «route» или в представлениях. –

+0

вот хорошее объяснение о 'ng-controller' http://blog.pluralsight.com/angularjs-step-by-step-controllers –

Смежные вопросы