2013-05-16 13 views
8

Ho tre controller: principale, prodotto, cliente. Il controller A fa parte della mia 'pagina principale'. I controllori B e C dipendono dalla posizione.Angolare: perché il mio evento è stato gestito due volte?

controller principale:

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

app.controller({ MainController: MainController }); 

prodotto:

var ProductController = function ($scope) { 

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

cliente:

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'); 
      } 
     }; 
    } 
}); 

Quando la mia posizione è #/products e viene invocato il numero addClicked, viene visualizzato due volte l'avviso 'Aggiungi prodotto'. Qualcuno ha la più pallida idea di cosa sia?

+1

sei sicuro di non avere due 'ng-controller =" ProductController "' nella tua pagina? Puoi pubblicare l'HTML? – sh0ber

+0

@ sh0ber Sì, sono sicuro. Quando cerco 'ng-controller =" ProductController "' Ottengo solo un risultato .. – Martijn

+0

Quando imposto le tue funzioni in un violino con il mio HTML, tutto funziona come previsto, quindi penso che in qualche modo stai ottenendo due istanze del controller. Forse questo succede altrove nel tuo codice, se non il tuo HTML – sh0ber

risposta

30

Il problema era che avevo anche dichiarato un controller nei percorsi. Così avevo configurato un controller sulla mia pagina html e uno sul provider di rotte. Ciò ha causato che tutto fosse eseguito due volte.

+1

doh, ho avuto questo problema – meffect

+1

Questo mi ha aiutato anche io, grazie. Suggerimento: fare sempre attenzione quando si dichiarano i gestori di eventi su oggetti che possono avere più istanze in esecuzione contemporaneamente. – brazorf

Problemi correlati