2015-10-28 23 views
5

Bu benim on github ele verdik en yakın olanAngular2 DI?

hizmetim

@Injectable() export class TodoService {}

olduğu Ama ES2016 dekoratörler kullanarak benim bileşeni enjekte nasıl emin değilim. Mümkün mü, yoksa Decoder'e özgü dekoratörler mi? TS'de biliyorum bir emitDecoratorMetadata seçeneği var.

cevap

5
  1. kullanın providers veya viewProviders bileşenine hizmet "sunmak" için:

  2. enjekte hizmeti bileşeni yapıcı içine parametreler türlerini belirtirken:

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

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

veya Inject parametre yönetmeni kullanarak.

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

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

Parametre dekoratörler ES2016 parçası olmayan (siz typescript spesifik olarak düşünebilirsiniz). Ancak added to the standard later olabilir.

gerçekten ES6/ES7 kullanmak istiyorsanız

, parameters için statik getter kullanın:

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

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

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

Ayrıca, ben tavsiye daha iyi angular2 Bağımlılık Injection anlamak için this article okumak için.

+0

Yani bu uygulamaların her ikisi de Typescript'e özeldir? ES2016 dekoratörlerini kullanmanın bir yolu yoktur (bu, parametre dekoratörlerini içermez, bağlantı için teşekkürler)? – iksose

+0

@iksose ES6/ES7 için bir örnek ekledim – alexpods

+0

Mükemmel! Harika çalışıyor, teşekkürler @alexpods – iksose