2015-10-28 12 views
5

これは私がon githubを得ている最も近いES2016デコレータ付きAngular2 DI?

私のサービスは

@Injectable() export class TodoService {}

あるしかし、私はES2016デコレータを使用して、私のコンポーネントに注入する方法がわかりませんよ。それは可能ですか、またはデコレータTypescript固有ですか? TSにはemitDecoratorMetadataオプションがあります。

答えて

5
  1. コンポーネントにサービスを "提供" するために使用providers又はviewProviders

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

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

又はInjectパラメータデコレータを使用して:パラメータのタイプを指定成分コンストラクタに

  • 噴射サービス。

    @Component({ 
        // ... 
        providers: [TodoService] 
    }) 
    class TodoComponent() { 
    
        constructor(@Inject(TodoService) todoService) { 
        this.todoService = todoService; 
        } 
    } 
    

    パラメータデコレータはES2016(あなたが活字体の特定としてそれを考えることができる)の一部ではありません。しかし、彼らはadded to the standard laterになることができます)。

    あなたが本当にES6/ES7を使用したい場合は、parametersの静的ゲッターを使用します。

    @Component({ 
        // ... 
        providers: [TodoService] 
    }) 
    class TodoComponent() { 
    
        static get parameters() { 
        return [[TodoService]]; // you can also return just [TodoService] 
        } 
    
        constructor(todoService) { 
        this.todoService = todoService; 
        } 
    } 
    

    また、私はより良いangular2依存性の注入を理解するためにthis articleを読んですることをお勧めいたします。

  • +0

    これらの両方の実装はTypescript固有ですか? ES2016デコレータを使用する方法はありません(パラメータデコレータは含まれていませんが、このリンクに感謝します)。 – iksose

    +0

    @iksose私はES6/ES7の例を追加しました – alexpods

    +0

    完璧!すごくうまくいきます、ありがとう@alexpods – iksose