Angular 2如何让setter等待输入setter来完成

时间:2017-01-05 12:04:55

标签: angular typescript

你好我有问题。在我的组件中,我有一个像这样的输入设置器:

 @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,他们几乎同时进入。因此,在这种情况下,对于此组件,getDataFromFlex函数将被调用两次。我不想第二次调用所以我认为getTrigg(boolean)将是一个解决方案。它不起作用。所以我需要你们的帮助。 getTrigg是默认的组件初始设置为true

1 个答案:

答案 0 :(得分:6)

我建议您使用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;
    }
}