私は約1年で2/4の角度を使用してきましたが、ルータをサービス中に注入することが悪い習慣であると考えられるかどうかは、このジレンマに戻り続けますか?角度4のサービスでルータを使用
これはよりアーキテクチャ上の問題です。私はそれに対して正確な答えはないと信じていますが、私はあなたの意見を聞きたいです。ここに2つの例があります。
- 次のコードを検討してください。いくつかの要素があるとしたら、ある行動の後にユーザーを特定の経路にリダイレクトしたいとします。ユーザーが新しいエンティティを追加したので、彼をグリッドにリダイレクトする必要があります。
component.ts
constructor(private router: Router) {}
someAction() {
// Some code here
this.router.navigate(['/grid']);
}
は、ここで私は、ルータおよびコンポーネントの両方がUI層であるので、それは、ルータを使用するように完全に罰金だと思います。
- 次に、
auth.service.ts
があり、それが認証を担当しているとしましょう。私たちはアプリケーションからユーザをログアウトさせたいと思っており、それを行うにはlogout()
の機能があります。
auth.service.ts
constructor(private router: Router) {}
logout() {
// Cleanup token, storage, etc.
this.router.navigate(['/login']);
}
だから建築思考:
- あなたはサービス内の、このようなルータの使用状況をどう思いますか?
- これは有効なアプローチだと思いますか?
- この場合、あなたは何を提案していませんか?
私はauthService
にeventEmitter
を置くことを考えると、例えばapp.component.tsの内側にそれを購読するが、それはサービスでそれを持つよりはましだ場合は、まだわかりませんでした。
このケースのコメントはありがたいです。どうもありがとう!
EDIT
別の例は:UIは、タスクとカレンダーです。
すべてのデータフローを処理し、カレンダーのデータを提供するサービスがあります。カレンダー自体はデータを要求するのではなく、サービスからのデータ変更をサブスクライブします。
今、このカレンダーから別の画面にユーザーをルーティングする必要があります。次の週/月/年のユーザークリックを想像してください。
このデータはルートURLに保存されるため、ユーザーはページの更新後も同じ日に滞在できますが、カレンダーコンポーネントは日/週/月を認識しません。
サービス内でカプセル化されています。この場合、サービスでルータを使用しますか?
最後の例では、ユーザーが予定の詳細にアクセスする方法、または予定表からナビゲートする方法について教えてください。私の場合、彼はその日にクリックして、この日の特定の内訳を取得したいとの相互作用について質問しています – Sonicd300
コンポーネントの中で私は自分のサービスで 'fetchDay()'を呼び出します。だから、基本的に私はサービスにデータをフェッチするよう依頼するが、同時にユーザーを次の画面にリダイレクトする必要があるが、ルートを計算するためにはサービスからの非カプセル化データが必要である。 –
サブスクライブ内で仕事をすることはできますか? fetchDay()では、データを取得するサービスを呼び出すコンポーネントに初期化ロジックを持つカレンダーをレンダリングし、データが正常に処理された後はいつでもコンポーネントからルーティングできます。カレンダー。 – Sonicd300