来自组件的指令中 @Input 的动态值 (Angular 4, 5, 6)
Dynamic values for @Input in Directive from Component (Angular 4, 5, 6)
指令中定义的输入:
@Input items: any[];
组件中定义的数据:
data: string[] = ['Item 1', Item 2', 'Item 3'];
组件模板中使用的指令:
<input type="text" myDirective [items]="data">
每当 data
数组在组件中更改时,我们如何更新指令中 items
的值?
例如,如果组件中的 data
更新为:
data: string[] = ['Item 1', Item 2', 'Item 3', 'Item 4'];
'Item 4'
必须可以在指令中访问。
指令不会检测到只是将数据推入数组。您需要将 data
的整个引用更改为更新的数组。
然后你可以在指令上监听OnChanges
生命周期事件并检查数据的值
ngOnChanges(changes: SimpleChanges) {
/// changes.data
}
你可以像这样通过 typescript 使用 getter setter
-
private items: any;
@Input() set items(value: any) {
this._categoryId = value;
this.doSomething(this._categoryId);
}
get items(): any {
return this._categoryId;
}
- 第二种方法-
或者您可以简单地使用 ngOnChanges
像这样对摘要循环中的任何更改 -
ngOnChanges(changes: SimpleChanges) {
/// your changes in the binding
}
指令中定义的输入:
@Input items: any[];
组件中定义的数据:
data: string[] = ['Item 1', Item 2', 'Item 3'];
组件模板中使用的指令:
<input type="text" myDirective [items]="data">
每当 data
数组在组件中更改时,我们如何更新指令中 items
的值?
例如,如果组件中的 data
更新为:
data: string[] = ['Item 1', Item 2', 'Item 3', 'Item 4'];
'Item 4'
必须可以在指令中访问。
指令不会检测到只是将数据推入数组。您需要将 data
的整个引用更改为更新的数组。
然后你可以在指令上监听OnChanges
生命周期事件并检查数据的值
ngOnChanges(changes: SimpleChanges) {
/// changes.data
}
你可以像这样通过 typescript 使用 getter setter
-
private items: any;
@Input() set items(value: any) {
this._categoryId = value;
this.doSomething(this._categoryId);
}
get items(): any {
return this._categoryId;
}
- 第二种方法-
或者您可以简单地使用 ngOnChanges
像这样对摘要循环中的任何更改 -
ngOnChanges(changes: SimpleChanges) {
/// your changes in the binding
}