web-dev-qa-db-ja.com

Angular 2typescriptの@Injectと@Injectableの違いは何ですか

@Injectをいつ使用するのか、@ Injectableをいつ使用するのかわかりませんか?

  import {Component, Inject, provide} from '@angular/core';
    import {Hamburger} from '../services/hamburger'; 
    export class App {
       bunType: string;
       constructor(@Inject(Hamburger) h) {
         this.bunType = h.bun.type;
       }
     }

そして..

  import {Injectable} from '@angular/core';
    import {Bun} from './bun';
    @Injectable()
    export class Hamburger {
      constructor(public bun: Bun) {
      }
    }
10
Sarvesh Yadav

_@Injectable_デコレータは、関連するクラスのコンストラクタに注入する依存関係に関するメタデータを実際に設定することを目的としています。これは、パラメーターを必要としないクラスデコレーターです。このデコレータがないと、依存関係は注入されません。

_@Injectable()
export class SomeService {
  constructor(private http:Http) {
  }
}
_

_@Inject_デコレータは、注入する要素に関するメタデータを指定するために、コンストラクターパラメーターのレベルで使用する必要があります。これがないと、パラメーターのタイプが使用されます(_obj:SomeType_は@Inject(SomeType) objと同等です)。

_@Injectable()
export class SomeService {
  constructor(@Inject(Http) private http:Http, @Inject('sometoken') obj) {
  }
}
_
9

この違いを読む必要があります- @ Injectと@Injectable

@Inject()

は、パラメータを挿入する必要があることをAngularに知らせるための手動メカニズムです。

TypeScriptを使用する場合、@ Injectはプリミティブを挿入するためにのみ必要です。例:

export class AppComponent {
  encryption = this.chatWidget.chatSocket.encryption;

  constructor(@Inject(ChatWidget) private chatWidget) { }
}

@Injectable()

Angularは、クラスが依存性注入で使用できることを知らせます。

例:

@Injectable()
export class ChatWidget {
constructor(
    public authService: AuthService,
    public authWidget: AuthWidget,
    public chatSocket: ChatSocket) { }
}

上記の例では、Angularのインジェクターは、型情報を使用してChatWidgetのコンストラクターに何を注入するかを決定します

2
info2ankit