Saltar al contenido

Cómo cancelar la suscripción a un evento de transmisión en angularJS. Cómo eliminar la función registrada a través de $ en

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)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *