Angular 角度:父组件和子组件通信,@Host和forwardRef

Angular 角度:父组件和子组件通信,@Host和forwardRef,angular,angular2-injection,Angular,Angular2 Injection,我正在试用新发布的Angular beta 0,希望有人能为我澄清一些事情 我有一个AppComponent,它是我项目的主要框架。它的模板创建了一个导航栏,导航栏中的项在其ngOnInit上被读入AppComponent的公共变量(称为“items”)*然后ngfor渲染这些项目。这很好用 AppComponent模板的底部是一个div,其中放置了一个路由器出口。根据用户选择的导航项,将触发路线并渲染不同的子组件。这也很好。在其中一个子组件中,我需要引用父AppComponent中的变量“it

我正在试用新发布的Angular beta 0,希望有人能为我澄清一些事情

我有一个AppComponent,它是我项目的主要框架。它的模板创建了一个导航栏,导航栏中的项在其ngOnInit上被读入AppComponent的公共变量(称为“items”)*然后ngfor渲染这些项目。这很好用

AppComponent模板的底部是一个div,其中放置了一个路由器出口。根据用户选择的导航项,将触发路线并渲染不同的子组件。这也很好。在其中一个子组件中,我需要引用父AppComponent中的变量“items”。我尝试了三种方法将AppComponent传递给构造函数中的子组件:

1. constructor(@Host() _host: AppComponent)
2. constructor(@Inject(forwardRef(() => AppComponent)) _host)
3. constructor(@Host() @Inject(forwardRef(() => AppComponent)) _host)
方法1在运行时失败,出现一个错误,比如“无法解析子组件的所有参数”,而方法2和3可以工作,但我不明白为什么。当调用子组件的构造函数时,人们会认为AppComponent是未定义的,这是不可能的,因为子组件不可能存在,除非它在AppComponent模板的路由器出口中呈现。但前瞻性参考确实有效

我可以发布更多的代码,但我想我遗漏了一些概念性的东西


附带问题-我在以前的alpha版本中看到,decorator@View经常用于组件定义,例如指定模板。在Angular网站上当前的所有示例中,我从未看到@View,只有@Component装饰器。@View现在过时了吗?

对于你的附带问题:@View现在是可选的(如果它不存在,那么你需要在@Component中设置“templateURL”或“template”)-这个更改是在2.0.0-alpha.40版本中进行的()

听起来像是为了将来支持一个组件的多个视图。在完全支持此功能之前,您只需使用
@Component()
。如果您仍打算使用此功能,则可能需要使用
@View()
注释。感谢@View()上的链接和答案。该链接引用了另一篇文章,文章的最后一条注释解释了模块加载器可能会留下“循环模块依赖项…在其中一个模块中未初始化”。我仍然不太明白,在运行我的特定应用程序的过程中,加载器会或者甚至可以选择加载我的子组件的一个版本,而这个版本并不知道AppComponent模块,因为后者的一个实例实际上已经存在。无论如何,forwardRef确实有效,所以我会坚持下去。谢谢!尽管问题尚未重新打开,但已确认存在错误。