Angular Parent 至 Child
Angular Parent to Child
最初我的 parent 组件与 child 没有任何关系。只是一个元素列表。但是当用户点击列表时 child 组件加载。然后我可以使用@ViewChild 从 parent 调用 child 组件的方法。但这最初不起作用,因为最初没有 parent 到 child 关系。我该如何解决这个问题。
您可以使用 @ViewChildren
,它非常相似,但也适用于 AfterViewInit
生命周期挂钩之前不存在的元素。此外,它将您的元素包装在 QueryList 中。
QueryList
确实有一个 changes
属性,这是一个您可以订阅的可观察对象。实现可能看起来像这样:
export class SomeComponent implements AfterViewInit {
@ViewChildren(ChildComponent) children: QueryList<ChildComponent>;
ngAfterViewInit(): void {
this.children.changes.subscribe(children => {
children.forEach( (child: ChildComponent) => {
child.somePublicMethod();
});
});
}
}
我想你可以使用 EventEmitter1。在组件中,您可以在加载时发出任何消息。在另一个组件中,您可以订阅 eventemitter。
我使用 @input() 将值从父级传递给子级并使用
ngOnChanges (changes: SimpleChanges) {
for (let propName in changes) {
let change = changes[propName];
console.log(change);
}
}
其中 ngOnChanges 订阅更改并存储当前值和先前值
最初我的 parent 组件与 child 没有任何关系。只是一个元素列表。但是当用户点击列表时 child 组件加载。然后我可以使用@ViewChild 从 parent 调用 child 组件的方法。但这最初不起作用,因为最初没有 parent 到 child 关系。我该如何解决这个问题。
您可以使用 @ViewChildren
,它非常相似,但也适用于 AfterViewInit
生命周期挂钩之前不存在的元素。此外,它将您的元素包装在 QueryList 中。
QueryList
确实有一个 changes
属性,这是一个您可以订阅的可观察对象。实现可能看起来像这样:
export class SomeComponent implements AfterViewInit {
@ViewChildren(ChildComponent) children: QueryList<ChildComponent>;
ngAfterViewInit(): void {
this.children.changes.subscribe(children => {
children.forEach( (child: ChildComponent) => {
child.somePublicMethod();
});
});
}
}
我想你可以使用 EventEmitter1。在组件中,您可以在加载时发出任何消息。在另一个组件中,您可以订阅 eventemitter。
我使用 @input() 将值从父级传递给子级并使用
ngOnChanges (changes: SimpleChanges) {
for (let propName in changes) {
let change = changes[propName];
console.log(change);
}
}
其中 ngOnChanges 订阅更改并存储当前值和先前值