【发布时间】:2016-08-24 14:16:01
【问题描述】:
在 Angular2 中,只需使用以下语法,就可以将父组件甚至祖先(例如祖父母)组件注入子组件:
export class Grandchild {
constructor( @Optional() @Host() @Inject(forwardRef(() => Ancestor)) ancestor)
}
但是,这似乎只适用于在单个模板中定义的祖先-孙子关系,如下所示:
<!-- App component template -->
<ancestor>
<foobar>
<grandchild></grandchild> <!-- injection works -->
</foobar>
</ancestor>
如果我们的模板如下所示,则注入将不起作用:
<!-- App component template -->
<ancestor>
<foobar></foobar>
</ancestor>
<!-- Foobar component template -->
<grandchild></grandchild> <!-- injection doesn't work -->
我为此做了一个 plunker:http://plnkr.co/edit/D9iSokONIAFAS8G1NTd1
【问题讨论】:
-
我认为不支持。
-
我希望不是这样,但如果是这样,那么我认为我应该向 Angular2 提交错误报告。
-
据我所知,只有直接父母可以被注入。您可以在祖父母处提供可由任何后代注入的服务。我很确定错误报告是多余的。
-
使用祖父母提供的服务的想法可能是关键。尽管“可选”部分存在问题,但可以通过另一个 hack 来克服。也许您应该修改您的评论作为答案?
标签: angular parent inject ancestor