第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何取消訂閱angularJS中的廣播事件。如何刪除通過$ on注冊的功能

如何取消訂閱angularJS中的廣播事件。如何刪除通過$ on注冊的功能

精慕HU 2019-12-10 09:39:06
我已經(jīng)使用$ on函數(shù)將我的偵聽器注冊到$ broadcast事件$scope.$on("onViewUpdated", this.callMe);我想根據(jù)特定的業(yè)務(wù)規(guī)則取消注冊此偵聽器。但是我的問題是,一旦注冊,我將無法注銷。AngularJS中有什么方法可以取消注冊特定的偵聽器?諸如$ on之類的方法可以注銷該事件,可能是$ off。因此,基于業(yè)務(wù)邏輯,我可以說 $scope.$off("onViewUpdated", this.callMe);并且當(dāng)有人廣播“ onViewUpdated”事件時,該函數(shù)將停止調(diào)用。謝謝編輯:我想注銷另一個功能的偵聽器。不是我注冊的功能。
查看完整描述

3 回答

?
陪伴而非守候

TA貢獻(xiàn)1757條經(jīng)驗 獲得超8個贊

查看大多數(shù)答復(fù),它們似乎過于復(fù)雜。Angular具有內(nèi)置的注銷機(jī)制。


使用以下命令返回$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();

});


查看完整回答
1 反對 回復(fù) 2019-12-10
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊

您需要存儲返回的函數(shù)并調(diào)用它以取消訂閱該事件。


var deregisterListener = $scope.$on("onViewUpdated", callMe);

deregisterListener (); // this will deregister that listener

至少在1.0.4中可以在源代碼中找到它:)。由于簡短,我將發(fā)布完整的代碼


/**

  * @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;

    };

},


查看完整回答
反對 回復(fù) 2019-12-10
?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗 獲得超3個贊

正確的方法是在@LiviuT的答案!


您總是可以擴(kuò)展Angular的范圍,以允許您刪除此類偵聽器,如下所示:


//A little hack to add an $off() method to $scopes.

(function () {

  var injector = angular.injector(['ng']),

      rootScope = injector.get('$rootScope');

      rootScope.constructor.prototype.$off = function(eventName, fn) {

        if(this.$$listeners) {

          var eventArr = this.$$listeners[eventName];

          if(eventArr) {

            for(var i = 0; i < eventArr.length; i++) {

              if(eventArr[i] === fn) {

                eventArr.splice(i, 1);

              }

            }

          }

        }

      }

}());

這是它的工作方式:


  function myEvent() {

    alert('test');

  }

  $scope.$on('test', myEvent);

  $scope.$broadcast('test');

  $scope.$off('test', myEvent);

  $scope.$broadcast('test');


查看完整回答
反對 回復(fù) 2019-12-10
  • 3 回答
  • 0 關(guān)注
  • 985 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號