2016-07-01 53 views
21

Ho appena aggiornato il mio progetto Angular2 al RC4 e il router è ora l'invio di questo messaggio di avviso nella console quando ho aperto la mia domanda:In Angular2 RC4 come si aggiungono componenti all'array di precompilazione?

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. 

Ho cercato di capire che cosa esattamente ho bisogno di fare per risolvilo ma, poiché la documentazione è scarsa, non riesco a trovare una risposta. Che cos'è questo array di precompilazione e dove posso trovarlo o come aggiungerlo?

risposta

22

Nelle versioni di router più recenti questo non dovrebbe essere più necessario.

< = RC.4

E 'solo un parametro aggiuntivo al @Component() o @Directive() decoratore:

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

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

/**
* Definisce i componenti che dovrebbe essere precompilato anche quando
* questo componente è definito. Per ogni componente elencato qui,
* Angular creerà {@link ComponentFactory ComponentFactory} e lo memorizzerà nello
* {@link ComponentFactoryResolver ComponentFactoryResolver}.

+0

Sembra funzionare, ma per essere sicuro di avere ragione, se questo è il mio componente dell'app: 'import {Component} da '@ angular/core'; importare {ROUTER_DIRECTIVES} da '@ angular/router'; importazione {FrontpageComponent} da "./components/frontpage/frontpage.component"; @Component ({ \t moduleId: module.id, \t selettore: 'app', \t template: '', \t direttive: [ROUTER_DIRECTIVES], \t precompilare: [FrontpageComponent] }) classe esportazione AppComponent {} ' Ho bisogno di importare e aggiungere ogni componente che instrada nell'array? – Jeeveegee

+0

Non posso affermare di comprendere appieno questo argomento anche se ho letto https://docs.google.it/document/d/1VRNljdv-6QDY4_I0xx3DHd-IZ19QlthheMLdGGKAAzM/edit # heading = h.s4bm1zs9qwi7 ;-) –

+1

Quel doc mi ha aiutato a spiegarlo, ora capisco un po 'meglio. Grazie. – Jeeveegee

0

Come ho osservato che se ho definito il componente con 'redirectTo' nella configurazione del percorso, il componente deve essere definito 'precompilare' anche nell'app root.

3

Non è necessario definire nelle direttive. Usa codice qui sotto

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

Bisogna aggiungere la componente al un array di precompilazione sulla meatadata del componente applicazione al fine di sbarazzarsi di quel messaggio.

@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

Se si aggiorna il "@ angolare/router": "3.0.0-beta.1" a "@ angolare/router": "3.0.0-beta.2" warning .then verrà risolvere .