Edited at

$rootScope.$onで登録した処理をキャンセルする方法

More than 3 years have passed since last update.

シングルトンなサービスとかで使うとハマりがちなやつ

var hogeCanceller;

service.bindHoge = function(cb){

// hoge処理が登録済みの場合はキャンセルする
if( hogeCanceller ) hogeCanceller();

// $onで登録した処理をキャンセルする処理を取得
hogeCanceller = $rootScope.$on(
'hoge',
function(){
//...
cb();
}
);
};

ちなみに以下のようにして、登録済み処理のキャンセル処理を取得することはできない

hogeCanceller = $rootScope.$on('hoge');