1

angular2 の依存性注入に苦労しています。私の例では、2 つのサービスがあります。

  • Service1 は Service2 を注入し、そこからデータを取得します。
  • コンポーネントは Service1 を注入し、Service1 からデータを取得します

コンポーネントでService2を提供する必要があります

@Component({
  providers: [Service1, Service2]
})

しかし、なぜ?Service1 に Service2 を注入しました。コンポーネントに Service2 への参照がないのに、コンポーネントに Service2 を提供する必要があるのはなぜですか?

ブートストラップ機能でサービスを提供できることは承知していますが、コンポーネントにサービスを提供したいと考えています...

bootstrap(AppComponent, [... Service1, Service2])

これが私のコード例です。プロバイダーが見つからないために機能していません

component.ts

import {Service1} from "service1.ts";    

@Component({
  providers: [Service1]
})
export class Component{
  constructor(private s: Service1) {
    //get data from Service1
  }
}

service1.ts

import {Service2} from "service2.ts";

@Injectable()
export class service1{
  constructor(private s2: Service2) {
    //get data from service2
    //edit data
    //return data
  }
}

service2.ts

@Injectable()
export class service2{
  constructor() {
    //return data
  }
}
4

1 に答える 1

1

Angular は、サービスの場所を知る必要があります。これが、(コンポーネントまたはブートストラップ呼び出しのいずれかで)プロバイダー配列が使用されるものです。階層的なレジストリと考えることができます。サービスを注入する場合は、サービスをレジストリにフィードする必要があります。

Angular1 では、factory関数を呼び出すなどしてサービスをレジストリに登録していました。ここではロジックが異なります。

全体として、コンポーネントがサービスに直接バインドされていなくても、Angular がその存在を認識できるように登録する必要があります。

于 2016-07-13T20:44:01.143 に答える