1. ホーム
  2. angularjs

[解決済み】angularJSでブロードキャストイベントの配信を停止する方法。on経由で登録した関数を削除する方法

2022-04-16 15:33:38

質問

on関数を使って$broadcastイベントに対するリスナーを登録しました。

$scope.$on("onViewUpdated", this.callMe);

で、このリスナーを特定のビジネスルールに基づいて登録解除したいのです。しかし、一度登録すると解除することができないのが問題です。

AngularJSには、特定のリスナーの登録を解除する方法はありますか?このイベントの登録を解除する$onのようなメソッド、または$offかもしれません。ビジネスロジックに基づいて、私は言うことができるようにします。

 $scope.$off("onViewUpdated", this.callMe);

そして、誰かが "onViewUpdated" イベントをブロードキャストすると、この関数が呼び出されなくなります。

ありがとうございます。

EDIT : 別の関数からリスナーの登録を解除したいのですが。登録した関数ではありません。

どのように解決するのですか?

返された関数を保存し、それを呼び出してイベントの配信を停止する必要があります。

var deregisterListener = $scope.$on("onViewUpdated", callMe);
deregisterListener (); // this will deregister that listener

これは、少なくとも1.0.4では、ソースコード :) にあります。短いので、フルコードを掲載します。

/**
  * @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;
    };
},

また、以下を参照してください。 ドキュメント .