2017-01-05 54 views
4

嗨,我有一個問題。在我的部分,我有一個inputt setter方法是這樣的:Angular 2如何讓setter等待輸入setter完成

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

}; 

我的問題是我得到真正的價值兩個編輯狀態和它們在幾乎同一時間正在添加。所以現在這個組件在這種情況下getDataFromFlex函數將被調用兩次。我不想第二次打電話,所以我認爲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; 
    } 
}