watchcollection w3schools example javascript angularjs angularjs-scope event-listener angular-broadcast

javascript - w3schools - angularjs $< emit



Angularjs $ emitido una vez, $ en dos veces (4)

Envía $ broadcast una vez desde rootScope, pero se llama dos veces al oyente ($ on).

El oyente está en un controlador y usa $rootScope.$on lugar de $scope.$on $rootScope.$on . ¿Alguien ha tenido este problema?

editar

rootScope:

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

otro controlador:

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


La única solución que pude poner a trabajar fue crear el oyente dentro del evento $ viewContentLoaded:

$scope.$on(''$viewContentLoaded'', function() { //Put your listener(s) in here $scope.$on(''menuActivateActionPublish'', function(event) {}); });


Para complementar la respuesta que1326, por ejemplo, si está utilizando ui-router y tiene algo como

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

y en yourPage.html tiene un ng-controller="YourController as Ctrl" , entonces está creando 2 instancias del controlador: 1 configuración creada por el estado y otra en su html.


Tenga cuidado de evitar dos instancias del controlador: dos escuchas de eventos, lo que significa que el método se ejecuta dos veces. (Ejemplo: usando dos veces ''ng-controller'')


Ya que registra su $ en escucha en $ rootScope, no se destruye con el controlador y la próxima vez que inicie el controlador se creará de nuevo.

Debe crear su oyente en el alcance del controlador

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