【发布时间】:2019-01-09 16:44:56
【问题描述】:
我有一个由父组件控制的动态表单,带有一组子 DTO,使用 ngFor 呈现,这些子组件通过 DTO 并使用它们自己的模板。比如:
父 HTML:
<div class="row parameter-list" *ngFor='let parameter of parameters'>
<div class="col-md-12">
<parameter-list-item
[parameter]="parameter"
[types]="types"
[events]="eventsSubject.asObservable()"
(onDelete)="onDeleteHandler($event)">
</parameter-list-item>
</div>
</div>
父组件:
@Input()
parameters: Parameter[];
儿童 HTML:
<input type="text" [(ngModel)]="parameter.Name" [disabled]="readonly">
<input type="text" [(ngModel)]="parameter.Description" [disabled]="readonly">
子组件:
constructor() {
this.readonly = true;
}
readonly: boolean;
@Input()
parameter: Parameter;
DTO:
export class Parameter {
Name: string,
Description: string) { }
}
当我想更改列表时,通过向父组件添加参数,我正在使用(单击)处理程序执行以下操作:
addParameter(): void {
console.log("ParameterListComponent.addParameter()");
let name = "Name" + this.parameters.length;
let parameter = new Parameter(
name,
"Description");
this.parameters.unshift(parameter);
}
基本上让 unshift 触发正确的生命周期钩子等等。
我需要知道的是,我是否可以以某种方式与新创建的子组件进行通信并将它的只读布尔值设置为 false..
【问题讨论】:
-
您可以使用@ViewChild 来获取对子组件的引用。
-
嗯,你会怎么声明呢?我看到的文档似乎希望您在单个子元素上使用 ViewChild,而不是数组。当您有一个子数组时,文档有点令人困惑:\
-
嗯,找到了这个人:stackoverflow.com/questions/40165294/…,这让我更接近于理解。但是我会在哪里定义 ngAfterViewInit()?在父组件或子组件中?是否有一种简洁的方式来表达类似“if child.Name == 'Name 20' inside the hook?
标签: angular parent-child ngfor angular-components