2015-06-11 7 views
6

Stavo passando all'applicazione demo angular2.0 ma sembra che gli iniettabili non funzionino da build 24 e mi danno errore come
"ERRORE ORIGINALE: Impossibile risolvere tutti i parametri per MyAppComponent. Assicurati che abbiano tutti un tipo o annotazioni validi. "
fino Build 23 il suo bel lavoro, please help me con l'emissione
di sotto è il codice demo, avevo fatto pochi manipolazioni dall'originale solo per l'apprendimento scopoiniettabili non funzionanti in angular 2.0 ultimo build 26

import {Component, View, bootstrap, NgFor} from 'angular2/angular2'; 


module foo{ 
    class FriendsService { 
    names: Array<string>; 
    constructor() { 
     this.names = ["Alice", "Aarav", "Martín", "Shannon", "Ariana","Kai"]; 
    } 
} 


@Component({ 
    selector: 'array', 
    injecetables: [FriendsService] 

}) 
@View({ 
     template: '<p>My name: {{ myName }}</p><p>Friends:</p><ul><li *ng-for="#name of names">{{ name }}</li></ul>', 
     directives: [NgFor] 
}) 
    export class arrayComponent { 
    myName: string; 
    names: Array<string>; 

    constructor(friendsService: FriendsService) { 
     this.myName = 'Alice'; 
     this.names = friendsService.names; 
    } 
    } 
} 

bootstrap(foo.arrayComponent); 

risposta

2

La nuova sintassi per injectables è appInjector.

Prova:

@Component({ 
    selector: 'array', 
    appInjector: [FriendsService] 
}) 

Inoltre, si vuole cambiare le importazioni per le Component e View a:

import {ComponentAnnotation as Component, ViewAnnotation as View} from "angular2/angular2"; 
+1

sopra la soluzione non funziona ancora mi dà lo stesso errore, c'è qualcos'altro che mi manca nel mio sopra codice –

+1

'appInjector' è stato rimosso @ alpha.29, questa soluzione non funzionerà più. Ora devo usare 'hostInjector' o' viewInjector' – shmck

+3

Sto avendo lo stesso problema sopra menzionato, ho provato sia hostInjector che viewInjector e ancora lo stesso errore. Puoi indicare qualcosa che mostra come usarli correttamente? – davertron

0

module foo{ class FriendsService {...

La classe FriendsService è definita all'interno di un modulo, che è un problema in due modi:

  1. La classe deve essere esportato dal modulo per renderlo visibile al di fuori foo
  2. Quando si fa riferimento FriendsSerivce non si specifica che è all'interno del modulo foo.

Suggerirei di rimuovere completamente il modulo foo e fare affidamento sui modelli di modulo in amd/commonjs. Ciò significa che non è necessario esportare la classe (supponendo che siano nello stesso file) e non è necessario modificare il riferimento alla classe nel componente.

0

Il tuo FriendsService è estratto in un modulo e non viene esportato, per cui arrayComponent non può accedervi e genera un errore.

Si dovrebbe semplicemente estrarre il modulo e avere foo essere dichiarato sopra arrayComponent nello stesso ambito.

Inoltre, il bootstrap alla fine è errato poiché arrayComponent non fa parte di foo. Basta avere essere

bootstrap(arrayComponent)

e dovrebbe andare bene.

7

Sembra che the currently latest angular2, alpha-35, sostituisca appInjector con bindings.

Ti piace questa:

import {FriendsService} from 'FriendsService'; 

@Component({ 
    selector: 'array', 
    bindings: [FriendsService] 
}) 

Ho anche dovuto esportare esplicitamente FriendsService:

export class FriendsService { 

Complete code example here

+0

@ klas-melbourn grazie! Ho notato che non stai usando il 'bootstrap()' dalla guida - c'è un motivo per cui? l'esportazione è stata soppiantata? – ghchinoy

+1

@ghchinoy Io uso 'bootstrap' nel principale file' app.ts'. Devi solo farlo una volta, non in ogni file '.ts'. –

+0

Bello, niente ha funzionato per me tranne quello! – Maxime

2

In angolare 2 c'è l'iniettore a livello di applicazione e poi ci sono la componente iniettori.

Se si desidera solo un'istanza di FriendsService in tutta l'intera applicazione, poi includerlo nella matrice bootstrap():

@Component({ 
    // providers: [FriendsService], 
    ... 

bootstrap(App, [FriendsService]) 

Se si preferisce avere un'istanza per componente, utilizzare la matrice providers nel oggetto di configurazione del componente invece:

@Component({ 
    providers: [FriendsService ], 
    ... 

bootstrap(App, []) 

Plunker

Vedere il documento Hierarchical Injectors per maggiori informazioni.