Pytanie Angular $ rootScope. Zdarzenie $ broadcast () dwa razy złapane w kontrolerze


Broadcating event on button click: -

$scope.onButtonClick = function(){
    $rootScope.$broadcast('onButtonClick');
}

I przechwytywanie zdarzenia w innym kontrolerze:

$rootScope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

Ale złapał dwa razy, mimo że wystrzelił tylko raz. Dlaczego?


24
2017-09-11 12:55


pochodzenie


Prawdopodobnie są aktywne dwa wystąpienia kontrolera. Częstym powodem jest użycie $routeProvider kontroler i ng-controller w tym samym widoku. - Chandermani
więc jak go rozwiązać? możesz mi pomóc? - Pratibha
Czy masz kontroler utworzony w związku ze sterownikiem ng, jak zasugerował Chandermani? Jeśli tak, usuń atrybut ng-controller. Tworzenie instancji kontrolera za pomocą ng-kontrolera, uiroutera i ngRoutera jest jednym lub drugim wyborem. Jeśli utworzysz dwukrotnie kontroler, otrzymasz dwa jego wystąpienia. - Martin
@ Chandermani: dziękuję :) działa. Daję kontrolerowi tylko w uganiu i działa :) - Pratibha
Pozwól mi dodać to jako odpowiedź, aby odpowiedzieć na zaznaczone pytanie i mogę wziąć kredyt :) - Chandermani


Odpowiedzi:


Okazało się, że wiele kontrolerów zostało utworzonych z powodu ng-controller deklaracja w html oraz jako część konfiguracji stanu dla ui-router.

Rozwiązaniem jest usunięcie jednej z deklaracji.


39
2017-09-12 09:54



usunięto deklarację kontrolera ng w html, ponieważ już ją dodałem jako konfigurację stanu w routerze. Teraz wszystko działa dobrze. Dziękuję Ci! - Srikanth Jeeva


Jeśli transmitujesz wydarzenie $rootScope, możesz złapać zdarzenie na każdym kontrolerze $scope. IMO nie powinieneś łapać zdarzenia na $rootScope.

$scope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

Stworzyłem wizytówkę plunkera, która pokazuje, że działa dokładnie zgodnie z oczekiwaniami. Plunker

Możliwe, że masz wiele instancji tego samego kontrolera, w którym przechwycisz zdarzenie. Proszę to sprawdzić, jak zasugerował Chandermani.


9
2017-09-11 13:14



nadal jest dwa razy złapany ... - Pratibha
@ user59442: Twoje pierwsze zdanie jest poprawne i dobre dla komentarza. Ale twoje ostatnie zdanie jest błędne. To nie jest odpowiedź. - gkalpak
znaczy, nie dostałem tego ??? które stwierdzenie? - Pratibha
to pomogło mi z jakiegoś powodu - k102
Co opinia ma do czynienia z prawdziwym zachowaniem, są to kwestie faktyczne i należy udzielić odpowiedzi opartej na konkretnej faktycznej wiedzy, a nie na osobistej opinii. - Hamza Ouaghad


Kątowy $rootScope.$broadcast() zdarzenie dwukrotnie przechwycone w kontrolerze

$scope.$on('saveCancelLeadInfo', function (event, args) {
    if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
        $scope.$$listenerCount["saveCancelLeadInfo"] = 0;
    }
    your code here
});

4
2018-05-30 11:46



to mi pomogło. - MilesStanfield