检测Input()子项内的值变化(角度)

时间:2019-12-19 08:50:10

标签: angular typescript

我只需要在输入值更改时更新子组件,子组件具有一些输入参数,这些输入参数会在ngInit()内设置一些局部变量,但是问题是更改子项不会更新的输入参数时的父项,因为ngInit( )仅在初始化后触发。

内部父母

<app-site-parameter-tbl *ngIf="siteTbl==true" [siteParameterTDataSet]="siteParameterDataSet" [siteParameterTGridColumns]="siteParameterColumns" [siteParameterFoot]="siteParameterFooter" [siteParameterT]="siteParameterTbl" [model]="siteModel" [bckColor]="this.tabBackColor"></app-site-parameter-tbl>

在某些触发事件中,父级会更改这些属性(作为子级的输入)

父母Ts

method(ds, columns, footer) {

    this.siteParameterDataSet = ds;
    this.siteParameterColumns = columns;
    this.siteParameterFooter = footer;
}

即使更改输入值,也只能点击一次

儿童

@Input() siteParameterT: boolean;
@Input() model: SiteModel;
@Input() siteParameterFoot: [];
@Input() siteParameterTGridColumns: [];
@Input() siteParameterTDataSet: any;

ngOnInit() {
    debugger;
    //setting local variables then they will render inside html

    this.siteParameter = this.siteParameterT;
    this.site = this.model;
    this.foot = this.siteParameterFoot;
    this.dataSet = this.siteParameterTDataSet;
}

请帮助,如果我可以直接在html内使用Input属性,那我怎么能对其进行更改? 帮助我知道输入更改时如何通知吗?

3 个答案:

答案 0 :(得分:3)

尝试在@Input上使用设置器:

@Input('siteParameterT')
set siteParameterT(value: boolean) {
    this.siteParameter = value
}

另外,您可以使用ngOnChanges

答案 1 :(得分:1)

改为使用ngOnChanges

示例用法

  @Input() employee: Employee

  ngOnChanges(changes: SimpleChanges) {
    /** Fire any time employee changes */
    if (changes.employee && changes.employee.currentValue) {
      this.formGroup.patchValue(this.employee)
    }
  }

还有一个decorator method。尽管请注意TypeScript装饰器是实验性的。

答案 2 :(得分:1)

您可以使用ngOnChanges来实现此功能。

 public ngOnChanges(changes: SimpleChanges): void {
    this.siteParameter = changes.siteParameter;
    etc.,
  }