我正在试验新发布的 Angular beta 0,希望有人可以为我澄清一些事情。
我有一个 AppComponent 作为我项目的主要框架。它的模板创建了一个导航栏,其项目在其 ngOnInit 时被读入 AppComponent 的公共变量(称为“项目”)。*ngfor 然后渲染项目。这工作正常。
AppComponent 模板的底部是一个 div,其中放置了一个路由器插座。根据用户选择的导航项触发路线并呈现不同的子组件。这也很好用。在其中一个子组件中,我需要引用父 AppComponent 中的变量“items”。我尝试了三种在其构造函数中将 AppComponent 传递给 SubComponent 的方法:
1. constructor(@Host() _host: AppComponent)
2. constructor(@Inject(forwardRef(() => AppComponent)) _host)
3. constructor(@Host() @Inject(forwardRef(() => AppComponent)) _host)
方法 1 在运行时失败,出现“无法解析子组件的所有参数”之类的错误,而方法 2 和 3 有效,但我不明白为什么。这会让人认为,调用 SubComponent 的构造函数时 AppComponent 是未定义的,这是不可能的,因为除非在 AppComponent 模板的 router-outlet 中渲染,否则 SubComponent 不能存在。但是前向参考确实有效。
我可以发布更多代码,但我认为我在这里遗漏了一些概念性的东西?
附带问题 - 我在以前的 alpha 版本中看到装饰器 @View 经常用于组件定义中,例如指定模板。在 Angular 网站上当前的所有示例中,我从未看到 @View 而只有 @Component 装饰器。@View 现在已经过时了吗?