2016-07-01 1 views
21

Я только что обновил свой проект Angular2 в RC4 и маршрутизатор теперь посылать это предупреждающее сообщение в консоли, когда я открываю мое приложение:В 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. 

Я попытался выяснить, что именно мне нужно сделать, чтобы исправьте это, но поскольку документация разрежена, я не могу найти ответ. Что это за прекомпилируемый массив и где я могу его найти или как его добавить?

ответ

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

/**
* Определяет компоненты это должно быть предварительно скомбинировано, когда
* этот компонент определяется. Для каждого из перечисленных здесь компонентов
* Угловой создаст {@link ComponentFactory ComponentFactory} и сохранит его в
* {@link ComponentFactoryResolver ComponentFactoryResolver}.

+0

Это похоже на работу, но чтобы убедиться, что я прав, если это мой компонент приложения: 'import {Component} from '@ angular/core'; импорт {ROUTER_DIRECTIVES} из '@ angle/router'; import {FrontpageComponent} из './components/frontpage/frontpage.component'; @Component ({ \t moduleId: module.id, \t селектор: 'приложение', \t шаблон: '<маршрутизатор-розетка>', \t директивы: [ROUTER_DIRECTIVES], \t precompile: [FrontpageComponent] }) класс экспорта AppComponent {} ' Мне нужно импортировать и добавлять каждый компонент, к которому я направляю, в массив? – Jeeveegee

+0

Я не могу утверждать, что полностью понимаю эту тему, хотя я читал https://docs.google.com/document/d/1VRNljdv-6QDY4_I0xx3DHd-IZ19QlthheMLdGGKAAzM/edit # heading = h.s4bm1zs9qwi7 ;-) –

+1

Этот документ помог объяснить это, теперь я понимаю немного лучше. Благодарю. – Jeeveegee

0

Как я уже заметил, если бы я определил компонент с «redirectTo» в конфигурации маршрута, то компонент также должен быть предварительно прекомпилирован в корневом приложении.

3

В директивах нет необходимости определять. Используйте код ниже

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

Вы должны добавить компонент в виде прекомпиляции массива на meatadata вашего приложения компонента для того, чтобы избавиться от этого сообщения.

@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{} 
2

Если вы обновляете "@ угловом/маршрутизатор": "3.0.0-beta.1" на "@ угловой/маршрутизатор": "3.0.0-beta.2" .then предупреждение будет решать ,