2016-10-10 3 views
2

コンポーネントを使用するようにコードを変換する際に問題が発生しました。 コンポーネントコントローラでは、$ timeout関数を使用してオブジェクトの更新を遅延させます。これは、通常のコントローラで動作しますが、いないコンポーネント内 - コードは非常に単純です:

this.settime = function(){ 
    this.showDisplay = {hide:true}; 
    $timeout(function() { 
    this.showDisplay= {hide:false}; 
    }, 2000); 
}; 

問題は、この例$ ctrl.showDisplay.hideでは、更新された値がDOMに渡されないということですtrueに設定されますが、タイムアウトが完了するとfalseに戻りません。 $ scopeを使ってみました。$ apply();強制的に更新を行いますが、影響はありません。

答えて

3

this$timeout内部にあるコントローラのあるcontextとは機能が異なります。 hide propertyオブジェクトをshowDisplayオブジェクトに変更している間は、オブジェクトの参照を変更する必要はなく、プロパティを直接変更できます。

var self = this; 
self.settime = function(){ 
    self.showDisplay = {hide:true}; 
    $timeout(function() { 
    self.showDisplay.hide = false; 
    }, 2000); 
}; 

ES6バージョン

this.settime = function(){ 
    this.showDisplay = {hide:true}; 
    $timeout(() => { 
    this.showDisplay.hide = false; 
    }, 2000); 
}; 
+1

や '.bind'! '$ timeout(function(){ this.showDisplay.hide = false; } .bind(this)、2000);' – tymeJV

+0

@tymeJVはい、ありがとうございました!確かに第1のものはより意味をなさないでしょう:) –

+0

@ PankajParkarありがとう! – user2942970

関連する問題