如何初始化@Input?

OPV*_*OPV 9 typescript angular angular-lifecycle-hooks

我尝试这样做:

  @Input() data: any[] = [];
Run Code Online (Sandbox Code Playgroud)

在 ngOnInit 里面我看到undefined

 ngOnInit() {
    console.log(this.data);
  }
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试获取长度时,在下面的代码中出现错误:return this.data.length;

因为它是未定义的。

为什么默认情况下初始化不起作用?

@Input() data: any[] = [];
Run Code Online (Sandbox Code Playgroud)

Nic*_*s K 8

您需要使用OnChanges角度指令。

export class AppComponent implements OnChanges {
    ...

    ngOnChanges(changes: SimpleChanges) {
        this.data = changes.data.currentValue;   // fetch the current value
        console.log(this.data);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

有关该指令的更多信息可以在文档中找到。

当 Angular(重新)设置数据绑定输入属性时进行响应。该方法接收当前和先前属性值的 SimpleChanges 对象。

在 ngOnInit() 之前以及每当一个或多个数据绑定输入属性发生更改时调用。