如何在Angular中从子组件将模板传递给父组件

如何在Angular中从子组件将模板传递给父组件,angular,Angular,我有一个这样的角度布局,我想从子组件更改父组件中的标题部分。 我用谷歌搜索了这个问题,但我只看到了关于将模板从父组件传递到子组件的文章 是否有方法将模板从子组件传递到父组件 或者,是否有任何方法可以将组件从子组件注入父组件的头部分 我知道我可以将值传递给父级,但我需要传递模板或组件。从体系结构的角度来看,考虑到某些组件应该如何影响其他组件、根到叶数据流和角度变化检测,这种想法不是很好。但这仍然是可能的 // parent.ts setHeaderTemplate(templateRef: Te

我有一个这样的角度布局,我想从子组件更改父组件中的标题部分。

我用谷歌搜索了这个问题,但我只看到了关于将模板从父组件传递到子组件的文章

是否有方法将模板从子组件传递到父组件

或者,是否有任何方法可以将组件从子组件注入父组件的头部分


我知道我可以将值传递给父级,但我需要传递模板或组件。

从体系结构的角度来看,考虑到某些组件应该如何影响其他组件、根到叶数据流和角度变化检测,这种想法不是很好。但这仍然是可能的

// parent.ts
setHeaderTemplate(templateRef: TemplateRef) {
  this.headerTemplate = templateRef
}
// parent.html
<div *ngTemplateOutlet="template">
</div>
//parent.ts
setHeaderTemplate(templateRef:templateRef){
this.headerTemplate=templateRef
}
//parent.html
//child.ts
@ViewChild(TemplateRef)headerTpl:TemplateRef;
构造函数(私有父级:ParentComponent){}
ngAfterViewInit(){
Promise.resolve().then(()=>this.parent.showHeaderTemplate(this.headerTpl));
}
//child.html
你好头

请注意,在子级中“显示”模板逻辑是在异步代码中完成的。这是因为angular在评估ViewInit时的变化检测性质,在父组件上已经进行了变化检测。

从架构的角度来看,考虑到一些组件应该如何影响其他组件,这种想法不是很好,根到叶数据流和角度变化检测。但这仍然是可能的

// parent.ts
setHeaderTemplate(templateRef: TemplateRef) {
  this.headerTemplate = templateRef
}
// parent.html
<div *ngTemplateOutlet="template">
</div>
//parent.ts
setHeaderTemplate(templateRef:templateRef){
this.headerTemplate=templateRef
}
//parent.html
//child.ts
@ViewChild(TemplateRef)headerTpl:TemplateRef;
构造函数(私有父级:ParentComponent){}
ngAfterViewInit(){
Promise.resolve().then(()=>this.parent.showHeaderTemplate(this.headerTpl));
}
//child.html
你好头

请注意,在子级中“显示”模板逻辑是在异步代码中完成的。之所以这样做,是因为angular的变化检测性质在评估完NgaftViewInit后,变化检测已经在父组件上进行了。

这是否回答了您的问题?这回答了你的问题吗?我懂了。那么,有没有更好的方法?我的目标是通过子组件更改父组件中的一个部分。如果这是您希望构建应用程序的方式,那么我相信答案中的示例是实现goalOK的最佳方式。非常感谢。我懂了。那么,有没有更好的方法?我的目标是通过子组件更改父组件中的一个部分。如果这是您希望构建应用程序的方式,那么我相信答案中的示例是实现goalOK的最佳方式。非常感谢。