2015-10-28 39 views
5

Questo è il più vicino ho ottenuto on githubAngular2 DI con decoratori ES2016?

Il mio servizio è

@Injectable() export class TodoService {}

Ma io sono sicuro come iniettare nel mio componente utilizzando ES2016 decoratori. È persino possibile, o sono i decoratori specifici di Typescript? So che in TS esiste un'opzione emitDecoratorMetadata.

risposta

5
  1. Usa providers o viewProviders a "fornire" il servizio al componente: Servizio

  2. Iniettare nel costruttore componente specificando i tipi di parametri:

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    constructor(todoService: TodoService) { 
    this.todoService = todoService; 
    } 
} 

o utilizzando Inject parametro decoratore.

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    constructor(@Inject(TodoService) todoService) { 
    this.todoService = todoService; 
    } 
} 

I decoratori di parametri non fanno parte di ES2016 (lo si può considerare specifico per TypeScript). Ma possono essere added to the standard later).

Se davvero si desidera utilizzare ES6/ES7, utilizzare getter statico per parameters:

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    static get parameters() { 
    return [[TodoService]]; // you can also return just [TodoService] 
    } 

    constructor(todoService) { 
    this.todoService = todoService; 
    } 
} 

Inoltre, vi consiglio di leggere per capire meglio this article angular2 Dependency Injection.

+0

Quindi entrambe le implementazioni sono specifiche di Typescript? Non c'è modo di usare i decoratori ES2016 (che non include i decoratori di parametri, grazie per il collegamento)? – iksose

+0

@iksose Ho aggiunto un esempio per ES6/ES7 – alexpods

+0

Perfetto! Funziona meravigliosamente, grazie a @alexpods – iksose