No olvides que en la informática un error casi siempere suele tener diferentes resoluciones, no obstante nosotros mostraremos lo más óptimo y eficiente.
Solución:
Debe almacenar la función devuelta y llamarla para darse de baja del evento.
var deregisterListener = $scope.$on("onViewUpdated", callMe);
deregisterListener (); // this will deregister that listener
Esto se encuentra en el código fuente 🙂 al menos en 1.0.4. Publicaré el código completo, ya que es corto.
/**
* @param string name Event name to listen on.
* @param function(event) listener Function to call when the event is emitted.
* @returns function() Returns a deregistration function for this listener.
*/
$on: function(name, listener)
var namedListeners = this.$$listeners[name];
if (!namedListeners)
this.$$listeners[name] = namedListeners = [];
namedListeners.push(listener);
return function()
namedListeners[indexOf(namedListeners, listener)] = null;
;
,
Además, consulte los documentos.
Al observar la mayoría de las respuestas, parecen demasiado complicadas. Angular ha incorporado mecanismos para anular el registro.
Utilice la función de cancelación de registro devuelta por $on
:
// Register and get a handle to the listener
var listener = $scope.$on('someMessage', function ()
$log.log("Message received");
);
// Unregister
$scope.$on('$destroy', function ()
$log.log("Unregistering listener");
listener();
);
Este código funciona para mí:
$rootScope.$$listeners.nameOfYourEvent=[];
Recuerda que puedes valorar esta división si te ayudó.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)