AngularJSでブロードキャストイベントの登録を解除する方法。$on経由で登録された関数を削除する方法質問する

AngularJSでブロードキャストイベントの登録を解除する方法。$on経由で登録された関数を削除する方法質問する

$on関数を使用して$broadcastイベントにリスナーを登録しました

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

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

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

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

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

ありがとう

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

ベストアンサー1

返された関数を保存し、それを呼び出してイベントの登録を解除する必要があります。

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;
    };
},

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

おすすめ記事