2017-03-09 3 views
2

を破壊し、$は私angularjsアプリケーションに発します。ここで私は機能発する$登録していますコードです:ここでは

this.scope.$on('changeTime', (event, args) => { 
    console.log(args.currentTime); 
}); 

すべての作業罰金です:私は返すために、このEMIT機能を聴いています別のコントローラでは

this.scope.$emit('changeTime', { 
    currentTime: this.currentTime 
}); 

をのようなオブジェクトがあります。私は、コンソールに印刷された最初の関数現在の時刻を呼び出すとき

this.functionone(){ 
     this.scope.$on('changeTime', (event, args) => { 
     console.log(args.currentTime); 
     }); 
    } 

    this.functiontwo(){ 
     this.scope.$on('changeTime', (event, args) => { 
     console.log(args.currentTime); 
     }); 
    } 

: しかし、このリスナーは、異なる状況に応じて呼び出された私の異なる機能に呼びかけています。私の条件はその時の変化や他の機能functiontwo()を呼び出すときに、私はまたfunctiononeコンソール値を見ることができます。第二の機能は、1の後に呼び出しを受ける際に2回の呼び出しchangetimeリスナーを意味

だから、どのように私は、この先に呼ばれるchangetimeの登録を解除することができます。だから二度目は来ない。デザインlisteners/$watch機能によって

+0

[angularJSのブロードキャストイベントの登録を解除する方法]の可能な複製。上の$](http://stackoverflow.com/questions/14898296/how-to-unsubscribe-to-a-broadcast-event-in-angularjs-how-to-remove-function-reg)経由で登録された機能を削除する方法 –

答えて

3

は、デ登録機能を返します。したがって、dereigster関数を直接呼び出すことによってイベントを登録解除することができます(存在する場合)。

this.functionone = function(){ 
    this.deregisterEvents(); 
    this.eventOneChangeTime = this.scope.$on('changeTime', (event, args) => { 
    console.log(args.currentTime); 
    }); 
} 

this.functiontwo = function(){ 
    this.deregisterEvents(); 
    this.eventTwoChangeTime = this.scope.$on('changeTime', (event, args) => { 
    console.log(args.currentTime); 
    }); 
} 

deregisterEvents(){ 
    //unregistering events. 
    if(this.eventOneChangeTime) this.eventOneChangeTime(); 
    if(this.eventTwoChangeTime) this.eventTwoChangeTime(); 
} 
+1

Working thanksありがとう:) –

関連する問題