在Angular2 RC4中,我如何将组件添加到预编译数组中?

21

我刚将我的Angular2项目更新到RC4版本,当我打开我的应用程序时路由器现在会在控制台中发送出这个警告信息:

router.umd.js:2466 'FrontpageComponent' not found in precompile array.  To ensure all components referred to by the RouterConfig are compiled, you must add 'FrontpageComponent' to the 'precompile' array of your application component. This will be required in a future release of the router.

我已经试图找出如何修复这个问题,但是由于文档很少,我找不到答案。什么是这个预编译数组,我在哪里可以找到它或者如何添加它?

5个回答

22

在更新的路由器版本中,这应该不再是必需的。

<= RC.4

这只是@Component()@Directive()装饰器的一个额外参数:

@Component({
  selector: '...',
  template: '...',
  directives: [FrontpageComponent],
  precompile: [FrontpageCmponent]
})

https://github.com/angular/angular/blob/6c5b653593eff19c5b9342b2cf0195aca49379cb/modules/%40angular/core/src/metadata/directives.ts#L968

/**
* 定义在定义此组件时应预编译的组件。对于此处列出的每个组件,
* Angular将创建一个{@link ComponentFactory ComponentFactory}并将其存储在
* {@link ComponentFactoryResolver ComponentFactoryResolver}中。


1
那份文档帮助我解释了一下,现在我有点明白了。谢谢。 - Jeeveegee
7
我曾在3.0.0-beta.1版本中看到这个问题,但升级到3.0.0-beta.2版本后,在控制台日志中就没有看到任何警告了。 - Naveed Ahmed
1
@NaveedAhmed 我也是。在组件装饰器中包含“precompile”是否仍然是一个合适的条目? - marked-down
我简直不敢相信这个设计有多糟糕。 如果Angular 2可以警告你应该做些什么:为什么它不能自己做呢? 现在我有了各种依赖关系,而Angular 2已经知道了。真是太糟糕了。 - Jochen Bedersdorfer
这是正在进行中的工作,并将随着下一次更新引入模块而发生变化。有几个类似的请求,我相信他们会采取措施,但只有在2.0发布之后才会这样做。 - Günter Zöchbauer
显示剩余2条评论

3

不需要在指令中定义。使用下面的代码:

    @Component({
  selector: '...',
  template: '...',
  directives: [],
  precompile: [FrontpageCmponent]
})

2
如果您将"@angular/router": "3.0.0-beta.1"升级到"@angular/router": "3.0.0-beta.2",那么警告将被解决。

0

我观察到,如果我在路由配置中使用'redirectTo'定义了组件,则该组件必须在根应用程序中进行“预编译”定义。


0

你需要将你的组件添加到应用程序组件的元数据的预编译数组中,以消除该消息。

@Component({
selector:'my-app',    
template:`YOUR HTML
    <router-outlet></router-outlet>`
,styleUrls:['app/app.component.css']
,directives:[ROUTER_DIRECTIVES]
,providers:[YOURPROVIDERS]
,precompile:[YOURCOMPONENT]})
export class AppComponent{}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接