Gar*_*ill 4 angular-directive angular-components angular
如果我有一个自定义指令ParentDirective和自定义组件,ChildComponent如下所示:
<div appParent>
<app-child></app-child>
</div>
Run Code Online (Sandbox Code Playgroud)
...然后我可以@ContentChild在指令中使用来引用组件:
@ContentChild(ChildComponent) child: ChildComponent;
Run Code Online (Sandbox Code Playgroud)
请参阅此 StackBlitz 的工作原理。(它登录到控制台以显示该child成员已设置)。
但是,如果我将 appParent 更改为结构指令,则child永远不会设置该成员。
<div *appParent>
<app-child></app-child>
</div>
Run Code Online (Sandbox Code Playgroud)
请参阅此 StackBlitz。
不能@ContentChild与结构指令一起使用吗?
我认为你不能,这是由于 angular 对两种类型的指令使用的设计。创建指令 viaTemplateRef并通过createEmbeddedViewof注入它会将ViewContainerRef 模板生成为 dom 中的兄弟,而不是 child。因此,Angular 的注入也尊重了这一点,所以孩子和创建的地方不能看到对方。你可以把它画在你的脑海里,作为一个额外的附加层。
这里是源代码createEmbeddedView
createEmbeddedView(context: any): EmbeddedViewRef<any> {
return new ViewRef_(Services.createEmbeddedView(
this._parentView, this._def, this._def.element !.template !, context));
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它返回一个新的ViewRef注入您的context.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |