gpt4 book ai didi

angular - 结构指令可以使用@ContentChild 引用子组件吗?

转载 作者:行者123 更新时间:2023-12-03 21:21:27 24 4
gpt4 key购买 nike

如果我有自定义指令 ParentDirective和自定义组件 ChildComponent安排如下:

<div appParent>
<app-child></app-child>
</div>

...然后我可以使用 @ContentChild在指令中引用组件:
@ContentChild(ChildComponent) child: ChildComponent;

this StackBlitz这是工作的地方。 (它登录到控制台以显示 child 成员已设置)。

但是,如果我将 appParent 更改为结构指令,那么 child成员永远不会被设置。
<div *appParent>
<app-child></app-child>
</div>

this StackBlitz .

是不是不能用@ContentChild与结构性指令?

最佳答案

我认为您不能,这是由于 angular 对两种类型的指令都使用了设计。通过 TemplateRef 创建指令并通过 createEmbeddedView 注入(inject)的 ViewContainerRef 将模板生成为 dom 中的兄弟,而不是子 .因此,Angular 的注入(inject)也尊重这一点,因此子节点和创建位置无法看到对方。您可以在脑海中将其绘制为那里的额外添加层。

Here createEmbeddedView的源代码

  createEmbeddedView(context: any): EmbeddedViewRef<any> {
return new ViewRef_(Services.createEmbeddedView(
this._parentView, this._def, this._def.element !.template !, context));
}

如您所见,它返回一个新的 ViewRef它在哪里注入(inject)您的 context .

More details here.

关于angular - 结构指令可以使用@ContentChild 引用子组件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com