2016-05-05 9 views
7

Im utilizzando un file index.ts per incapsulare le esportazioni come indicato nella guida angolare 2 (https://github.com/mgechev/angular2-style-guide/blob/master/old/README.md#directory-structure).
Questo ha funzionato bene attraverso l'app che sto scrivendo, ma per qualche motivo in un servizio che sto cercando di iniettare in un altro servizio questo causa uno strano errore.

L'uso del file index.ts per esportare la classe non è definito nel costruttore iniettato

La classe esportata:

import {Injectable} from "angular2/core"; 
@Injectable() 
export class UserIds{ 
    private _signature_id:string; 
    private _role_id:number; 
    get signature_id():string{ 
     return this._signature_id; 
    } 
    set signature_id(id:string){ 
     this._signature_id = id; 
    } 
    get role_id():number{ 
     return this._role_id; 
    } 
    set role_id(id:number){ 
     this._role_id = id; 
    } 
} 

Il file index.ts:

export {Midiate} from "./midiate.service/midiate.service"; 
export {HttpRest} from "./http_rest.service/http_rest.service"; 
export {UserIds} from "./user_ids.service/user_ids.service" 

Il codice che ha causato l'errore (il file importazione):

import {UserIds} from "../index"; 
import {Http} from 'angular2/http'; 
@Injectable() 
export class HttpRest{ 
constructor(
    public _http: Http, 
    public userIdsx: UserIds 
){} 
... 
} 

Il Errore lanciato dal browser:

EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http, undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'HttpRest' is decorated with Injectable. 

Come si può vedere la classe UserIds non è definita nei parametri del costruttore.

Modifica delle userids importare il file sorgente ha risolto il problema:

import {UserIds} from "../user_ids.service/user_ids.service"; 

Ancora voglio mantenere il vecchio stile su questo utilizzando i index.ts come tutti gli altri servizi e componenti nella mia app, e anche capire perché è successo.

+0

Ancora nessun progresso con questo, e non ha idea del perché questo accade, succede con altre esportazioni a. – wagwanJahMan

+0

Sembra che avvenga solo con @Inizectable. Avere lo stesso problema. – rook

risposta

2

Nella guida di stile di Minko Gechev sta facendo riferimento al file per nome. Ho anche incontrato questo problema e ho semplicemente spostato il file della facciata su una cartella e quindi ho fatto riferimento a quel file per nome. Ho anche rinominato la cartella per evitare un conflitto di nomi con il file di facciata perché il percorso è confuso poiché non c'è estensione nel percorso

Mi sono imbattuto in this question che mi chiede di creare un file index.ts nella cartella e stanno avendo lo stesso problema che stai avendo.

Da

| shared 
    | services 
     | login.service.ts 
     | blog.service.ts 

Per

| shared 
    | _services 
     | login.service.ts 
     | blog.service.ts 
    | services.ts 

Dove services.ts contiene

export {LoginService} from './_services/login.service' 
export * from './_services/blog.service' 

ho quindi fare riferimento i miei servizi con la seguente importazione

import {LoginService, BlogService} from './shared/services' 
+0

puoi anche spostare services.ts in services/index.ts e dovrebbe funzionare allo stesso modo. – Sierrodc

+0

Sì, funzionerebbe pure –

1

Sembra che l'ordine in cui metti le tue esportazioni in index.ts sia importante! Non sono sicuro se si tratti di un bug o meno, ma comunque ...

Le classi decorate con i metadati dovrebbero essere nella parte superiore dell'indice.ts Se uno di loro inietta un altro, "un altro" dovrebbe essere sopra "uno".

+0

Mi chiedo perché questa domanda non sia contrassegnata come corretta, esultante;) –

Problemi correlati