5

これは私がgithubで得た最も近いものです

私のサービスは

@Injectable() export class TodoService {}

しかし、ES2016 デコレータを使用してコンポーネントに挿入する方法がわかりません。それは可能ですか、それともデコレータはTypescript固有ですか? TSにはオプションがあることを知っていemitDecoratorMetadataます。

4

1 に答える 1

5
  1. providersまたはviewProvidersを使用して、サービスをコンポーネントに「提供」します。

  2. パラメーターの型を指定して、サービスをコンポーネント コンストラクターに挿入します。

@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 の一部ではありません (TypeScript 固有のものと見なすことができます)。ただし、後で標準に追加できます)。

本当に 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 依存関係の挿入をよりよく理解することをお勧めします。

于 2015-10-28T21:01:48.207 に答える