2017-01-05 4 views
4

こんにちは私はそれに問題があります。角2セッターを完了させるためにセッターを入力する方法

@Input() set editStatus(status: boolean) { 
    this.savedEditStatus = status; 
    if (this.savedEditStatus === true && this.getTrigg === true) { 

     this.getDataFromFlex("SHOWS_L").then((data: any) => { 
      this.getTrigg = false; 
      this.lengthDataOptions = data; 
     }) 
    } else { 
     this.getTrigg = true; 
     this.lengthDataOptions = undefined; 
    } 

}; 

私の問題は、私は値がtrueで2つの編集ステータスを取得し、彼らはほぼ同時期に来ている:私のコンポーネントでは私はこのようなinputtセッターを持っています。この場合、このコンポーネントのgetDataFromFlex関数は2回呼び出されます。私はgetTrigg(ブール値)が解決されると思いますので、私は二度目の呼び出しを望んでいません。そして、それは動作しません。だから私はあなたから少しの助けが必要です。 getTriggは、コンポーネント起動時のデフォルトでtrueに設定されています

答えて

3

ngOnChangesインターフェイスを使用して、このような外部コンポーネントとの通信を行うことをお勧めします。これにより、この値が変更された後に必要な処理を行うことができます。

import { Component, OnInit, Input, OnChanges, SimpleChange } from '@angular/core'; 

@Input() savedEditStatus: boolean; // change to field not getter/setter 

ngOnChanges(changes: { [propKey: string]: SimpleChange }) { 
    if (changes['savedEditStatus'] && changes['savedEditStatus'].currentValue === true && 
     this.getTrigg === true) { 
     this.getDataFromFlex("SHOWS_L").then((data: any) => { 
      this.getTrigg = false; 
      this.lengthDataOptions = data; 
     }) 
    } else { 
     this.getTrigg = true; 
     this.lengthDataOptions = undefined; 
    } 
} 
関連する問題