ValuesComponent
は、Value
の配列をHTMLテーブルに表示しているとします。優秀なプログラマーとすべてのビーイング Resolveサービスでエラーを処理する
// in value.ts
export class Value { ... }
// in values.component.ts
@Component(...)
export class ValuesComponent { ... }
、私は値を提供する責任がある別のクラスを作成しました。 ValuesService
としましょう。
// in values.service.ts
@Injectable()
export class ValuesService
{
public getValues(): Observable<Value[]>
{
...
}
}
サービスは、Webサービスから値を取得しているとします。私のコンポーネントに直接サービスを注入するのではなく、今
/api/values
、私は角度ルータがに移動する前に値をプリフェッチようにしたいですコンポーネント
私はResolve
サービスクラスを作成し、ルータモジュールに接続しました。
// in values-resolver.service.ts
export class ValuesResolverService implements Resolve<Value[]> {
constructor(private backend: ValuesService) {
}
public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Value[]> {
return this.backend.getValues();
}
}
// In app.module.ts (in @NgModule())
imports: [
RouterModule.forRoot([{
path: 'values',
component: ValuesComponent,
resolve: { values: ValuesResolverService }
}])
]
どのように私はこれまでやっていますか?良い?次に、ValuesService.getValues()
が失敗したときのエラー処理をどこに置くのですか? (接続エラー、内部サーバーエラー、...)
ユーザーが/#/values
ルートに移動しようとしたときにエラーが発生すると、エラーをコンソールに記録してナビゲーションを停止します。理想的には、ユーザーを/#/error
ルートにリダイレクトしたいと思います(サンプルコードには示されていません)。
この質問には、正確に何が起こるべきかについては言及されていません。 – estus
単純な 'console.log'は問題ありません。私はそれを置く場所と戻ってくるもの(もしあれば)を知る必要があります。 –
それから問題は、リゾルバではなく、オブザーバブルについてです。これは 'this.backend.getValues()。catch(...)'を返します。 – estus