私は大きなAngular2アプリケーションを開発しています。アプリケーションには、同様の動作をする多くのコンポーネントが含まれています。 DRYの原則の後、私は共有サービスにすべての共通コンポーネント機能を含んでいます。Angular2:コンポーネントとサービスの間のスコープ?
しかし、ほとんどのコンポーネント(foo.component.tsなど)では、特定のコンポーネント(foo.service.tsなど)のデータを取得する、対応する「パーソナル」サービスがあります。すべてのコンポーネントを合計すると、2つのサービスが使用されます。サービスはそれぞれ固有のサービスと共有サービスです。 「個人的な」サービスのためのコードは次のようになります。現在
export class MasterDataService {
getData(param) {
return this._http.get("some/url/"+param+"/)
.map((res) => {
return res.json();
})
}
}
、私のコンポーネントは、データをフェッチするために、共有サービスを使用します。私はまた、パラメータとして、私のコンポーネントを送って同じ機能で
public initializeController(dataService, component:any) {
this._activatedRoute.params.subscribe(
(param: any) => {
this._param = param;
dataService.getData(param).subscribe(
data => this._httpSuccess(data, component),
err => this._httpError(err)
);
}
);
}
:私は今、これを行う方法は、共有サービス内の関数を呼び出し、その機能にPARAMTERとして「個人的な」サービスを送信することである
// In component
this._controller.initializeController(this);
これは、私のHTMLのデータを含むコンポーネントにdataModelがあるためです。ジェネリック共有サービスは、パーソナルサービスの呼び出しと、自分のコンポーネント内のdataModelの更新を担当します。
setLocalData(data) {
console.log("Callback fired!!");
this.masterdataModel = data;
this.loading = false;
}
this.dataModel = {
data_1: "foo",
data_2: "bar",
};
私は、送信することによって、私の共有サービスを通じて、私のコンポーネントの私のモデルデータを設定する際に、機能するソリューションを発見した「この」私のサービス機能への私のコンポーネントからPARAMTERとして:
// In component
this._controller.initializeController(this);
// In service
public initializeController(component:any) {
component.dataModel = {/* some new data */}
}
他の方法で共有サービスからコールバック機能やパーソナルサービスにアクセスすることができないため、パーソナルサービスとコンポーネントをパラメータとして送信します。
質問1:各コンポーネントが持つ「個人的な」サービスから機能を呼び出すことができるこの汎用サービスまたは機能をどのように構成しますか?私は正しい方法でそれをやっているのですか、それとももっと良い方法がありますか?
質問2:コンポーネントはサービス関数を呼び出すか、コンポーネントコールバックを設定するか、サービス内のコンポーネント内の変数にどのようにアクセスしますか?
質問3:質問:これは私の共有サービスで "this"のコンテキストを切り替えるために "=>"を使用しているためです。これがパラメータとしてコンポーネントを送信したのです。これにはどんな解決策がありますか?
ご協力いただきありがとうございます。あなたはその後、各コンポーネントのインスタンスは、独自のサービスインスタンスを取得し、コンポーネントで「個人的なサービス」を提供することができます