¿Cómo puedo redirigir a otra página si la resolución falla en Angular 2? Llamo a esta resolución para mi página de edición, pero quiero manejar los errores en la página de resolución
Mi determinación:
resolve(route: ActivatedRouteSnapshot): Promise<any>|boolean { return new Promise((resolve, reject) => { if (route.params['id'] !== undefined) { this.dataService.getHttpEmpresaShow(this.endpoint_url_Get + route.params['id']) .subscribe( result => { console.log("ok"); return resolve(result); }, error => { return resolve(error); }); }});Al igual que en los documentos , llame a this.router.navigate(["url"]) ... (piense en inyectar Router en su constructor)
class MyResolve { constructor(private router: Router) {} resolve(route: ActivatedRouteSnapshot): Observable <any> { return this.dataService.getHttpEmpresaShow(this.endpoint_url_Get + route.params['id']) .pipe(catchError(err => { this.router.navigate(["/404"]); return EMPTY; })); } }Otra solución, si desea aplicar una estrategia de redirección después de fallar en TODOS sus resolutores, puede interceptar un evento de enrutador y aplicar la redirección en un evento fallido. Aquí el código que puede agregar en su AppComponent:
import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; import { Router, RouterEvent, NavigationError } from '@angular/router'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent implements OnInit { constructor( private router: Router, private cdr: ChangeDetectorRef ){} ngOnInit() { this.router.events.subscribe((event: RouterEvent) => { this.navigationInterceptor(event) }); } navigationInterceptor(event: RouterEvent): void { if (event instanceof NavigationError) { this.router.navigate(["error"],{ queryParams: { redirect: event.url } }); } this.cdr.detectChanges(); } }