いくつかのルートは静的なページにすぎません。
これらのルート(50以上)では、ルートが開始されるときに、2つの異なるサービスで2つのメソッド(以上)を呼び出す必要があります。
簡単な解決策は、各ページでngOnInitメソッドを呼び出し、前述のメソッドを呼び出すことです。
これは、同じコードを50種類のファイルにコピーして貼り付けることを意味します。コピーして貼り付けるのは悪いですが、維持することはできません。複数のコンポーネント/ルートを持つngOnInitでサービスのメソッドを呼び出す方法
例を作るために:
は、私がページ "よくある質問"(手動割り当てられたID:52)を持っているとページが(手動で割り当てられたID:13) "会社を探します"。これらは2つの異なるルートです。
私は管理パネルからそれらのページを編集するために使用されるサービス "エディタ"を持っており、私が見ているページを追跡する必要があります。
私は、ページがすでにバックエンドに照会されたかどうか、またはサーバーから引き出す必要があるかどうかをチェックするサービス "キャッシュ"を持っています。
これらのサービスはどちらも、そのルートに手動で割り当てたIDを知りたいと思っています。
この特定のケースのIDはデータベース/ APIのクエリに使用されますが、この詳細は質問中心ではなく、同様の問題を持つ他の人の回答を無効にすべきではありません。
// Page FAQ
id: number
constructor() {
this.id = 52; // 52 is the id that I assigned to the page FAQ
}
ngOnInit() {
editorService.keepTrack(this.id);
editorService.moreMethod().notMaintainable().whatIfIChangeSomething(this.id/0);
cacheService.keepTrack(this.id);
}
// Page Find Us
id: number
constructor() {
this.id = 13; // 13 is the id that I assigned to the page Find Us
}
ngOnInit() {
editorService.keepTrack(this.id);
editorService.moreMethod().notMaintainable().whatIfIChangeSomething(this.id/0);
cacheService.keepTrack(this.id);
}
さて、これは私が手で問題に関連していない内容で質問をオーバーロードする必要が表示されていないとして、簡略化した例があります。
私が考えることができる唯一の解決策は、3番目のサービスを作ることです。これは他の2つのメソッドを呼び出します。
したがって、すべてのページで、ngOnInitでこの単一のサービスメソッドを呼び出すだけで、この3番目のサービスに他の2つを呼び出す方法についての実装を残す必要があります。
これはコピーと貼り付けを最小限に抑え、実装を単一のmanteinableファイルに残します。例を作るために
:
// Page FAQ v2
id: number
constructor() {
this.id = 52;
}
ngOnInit() {
inceptionService.doStuff(this.id);
}
// Page Find Us v2
id: number
constructor() {
this.id = 13;
}
ngOnInit() {
inceptionService.doStuff(this.id);
}
// InceptionService
export class InceptionService {
doStuff(data) {
editorService.keepTrack(data);
editorService.moreMethod().notMaintainable().whatIfIChangeSomething(data/0);
cacheService.keepTrack(data);
}
}
質問です:
これを行うには良い方法はありますか?私は最高のアプローチを使っていないと感じています。
私はまだサービスを悪用しているように感じています。
'ngOnInit()'で何をしているのかを示すコードを投稿することができれば、それに従う方が簡単です。 –
私はこの例を追加しました。 – Kunepro
「52」と「13」はどこから来たのですか?あなたはそのコンポーネントを必要としますか、それともグローバルサービスのようなトップレベルでそれを得る方法はありますか? –