2013-05-16 19 views
8

Mam trzy kontrolery: główne, produktu, klienta. Kontroler A jest częścią mojej "masterpage". Kontrolery B i C zależą od lokalizacji.Kątowe: Dlaczego moje wydarzenie jest obsługiwane dwukrotnie?

kontroler główny:

var MainController = function ($scope, $location, $rootScope, ToolbarService) { 
    $scope.addClicked = function() { 
     ToolbarService.onAddButtonClick(); 
    }; 
}; 

app.controller({ MainController: MainController }); 

produkt:

var ProductController = function ($scope) { 

    $scope.$on('handleAddButtonClick', function() { 
     alert('Add product'); 
    }); 
}; 
app.controller({ ProductController: ProductController }); 

klientów:

var CustomerController = function ($scope) { 

    $scope.$on('handleAddButtonClick', function() { 
     alert('Add customer'); 
    }); 
}; 
app.controller({ CustomerController: CustomerController}); 

toolbarService:

app.service({ 
    ToolbarService: function ($rootScope) { 
     return { 
      onAddButtonClick: function() { 
       $rootScope.$broadcast('handleAddButtonClick'); 
      } 
     }; 
    } 
}); 

Gdy moja lokalizacja to #/products, a wywoływana jest główna nazwa addClicked, otrzymuję alert "Dodaj produkt" dwa razy. Czy ktoś ma pojęcie, dlaczego tak jest?

+1

czy na twojej stronie nie masz dwóch 'ng-controller =" ProductController "'? Czy możesz opublikować kod HTML? – sh0ber

+0

@ sh0ber Tak, jestem pewien. Kiedy szukam 'ng-controller =" ProductController "' Otrzymuję tylko jeden wynik .. – Martijn

+0

Kiedy ustawiam twoje funkcje w skrzypcach z moim HTML, wszystko działa zgodnie z oczekiwaniami, więc myślę, że jakoś dostajesz dwa wystąpienia kontroler. Może to zdarza się gdzie indziej w twoim kodzie, jeśli nie twój HTML – sh0ber

Odpowiedz

30

Problem polegał na tym, że miałem również kontroler zadeklarowany na trasach. Tak więc skonfigurowałem kontroler na mojej stronie html i jeden w dostawcy tras. Spowodowało to, że wszystko wykonane dwukrotnie.

+1

doh, miałem ten problem – meffect

+1

To też mi pomogło, dziękuję. Podpowiedź: zawsze należy zachować ostrożność podczas deklarowania procedur obsługi zdarzeń na obiekcie, które mogą mieć wiele instancji działających w tym samym czasie. – brazorf

Powiązane problemy