navigationend example change angular angular2-routing rxjs5

example - router events angular 6



Enrutador angular 2 resuelto con observable (1)

No llame a subscribe() en su servicio y deje que la ruta se suscriba.

Cambio

return this.searchService.searchFields().subscribe(fields => {

a

import ''rxjs/add/operator/first'' // in imports return this.searchService.searchFields().map(fields => { ... }).first();

De esta manera, se devuelve un Observable lugar de una Subscription (que es devuelta por subscribe() ).

Actualmente el router espera a que se cierre el observable. Puede asegurarse de que se cierre después de emitirse el primer valor, utilizando el first() operador first() .

Después del lanzamiento de Angular 2 RC.5 se introdujo la resolución del enrutador. Here muestra un ejemplo con Promise, ¿cómo hacer lo mismo si hago una solicitud al servidor con Observable?

search.service.ts

... searchFields(id: number) { return this.http.get(`http://url.to.api/${id}`).map(res => res.json()); } ...

búsqueda-resolver.servicio.ts

import { Injectable } from ''@angular/core''; import { Router, Resolve, ActivatedRouteSnapshot } from ''@angular/router''; import { Observable } from ''rxjs/Observable''; import { SearchService } from ''../shared''; @Injectable() export class SearchResolveService implements Resolve<any> { constructor( private searchService: SearchService , private router: Router ) {} resolve(route: ActivatedRouteSnapshot): Observable<any> | Promise<any> | any { let id = +route.params[''id'']; return this.searchService.searchFields(id).subscribe(fields => { console.log(''fields'', fields); if (fields) { return fields; } else { // id not found this.router.navigate([''/'']); return false; } }); } }

search.component.ts

ngOnInit() { this.route.data.forEach((data) => { console.log(''data'', data); }); }

Obtener Object {fields: Subscriber} lugar de datos reales.