サービスを提供する必要がある場合親コンポーネントの値をインスタンス化するとすぐに、その親コンポーネントのプロバイダリストにサービスを提供し、そこで正しくインスタンス化する方がよいでしょう。
この場合、親コンポーネントが作成したサービスのインスタンスを使用する以外は、独自のプロバイダのリストにある場合と同様に、子コンポーネントのコンストラクタにインポートして注入できます。
実際、依存関係注入を使用する場合、親コンポーネントのすべての子孫コンポーネントに同じサービスインスタンスが提供されます。あなたのコンポーネントで何かに依存していた
親コンポーネント
import { SomeService } from './somelocation'
@Component({
selector: ' ... ',
providers: [ SomeService ],
....
コンポーネントのコンストラクタに渡すことでサービスを注入し、そしてサービスがそれにいくつかのプロパティ(パブリックプロパティを)持っていたと言うことができます。コンポーネントのngOnInit()メソッドで、サービスのその部分を設定できます。
constructor(private someService: SomeService) {
// passing the service in the constructor here makes it available to your component
}
ngOnInit() {
if (this.someComponentProperty < 100) {
// this compares some property in the component to 100, and if its less than that, sets the property in the service equal to the property in the component
this.someService.someServiceProperty = this.someValue
// or you could call the service's methods
this.someService.serviceMethod();
// you'll be able to access any public property or method from the service in this component.
}
}
子コンポーネントのコンストラクタで
import { SomeService } from './somelocation'
...
constructor(private someService: SomeService) { ...
あなたは両方のコンポーネントにサービスの同じインスタンスを取得しますが、この方法は、サービスが、それは、すぐにそれがそれらを必要として必要と設定値を取得し、あなたは不必要にする必要がないことを保証しますコンポーネント間でプロパティを共有する必要があります(つまり、親コンポーネントのプロパティにアクセスするだけで子供がサービスにそのプロパティを提供できるようにする必要はありません)。
はい、値をサービスコンストラクタに渡したいと思います。あなたは、サービスのプロパティでそれを行うことができると述べました。どんな例もお願いします。 –
私が正しく理解していれば、サービス上の他のメソッドを呼び出す前に、データをサービスに渡すための初期化(値)メソッドが必要であると言うことを意味しますか?初期化メソッドはngOnitから呼び出す必要があります。私は正しい?あなたは明確にしていただけますか? –
私の返信を更新しました。それは役に立ちますか? – DeborahK