Úhlový směrovač:

Jedním ze způsobů, jak se vypořádat se získáváním a zobrazováním dat z API, je nasměrovat uživatele na komponentu a poté v háčku ngOnInit této komponenty zavolat metodu ve službě, která získá potřebná data. Při získávání dat může komponenta možná zobrazit indikátor načítání. Existuje však i jiný způsob pomocí takzvaného route resolveru, který umožňuje získat data ještě před navigací na novou trasu.

Jednoduchý resolver

V tomto příspěvku budeme implementovat jednoduchý route resolver, který získá data z rozhraní API Hacker News zpřístupněného v rámci projektu HNPWA ještě před navigací na trasu, která nasbíraná data zobrazí. Začneme implementací nejjednoduššího resolveru, který jednoduše vrátí řetězec po zpoždění 2 sekund. To by mělo pomoci získat celkový obrázek o tom, jak vše zapojit dohromady.

Pro náš resolver vytvoříme samostatnou třídu ve vlastním souboru:

hn.resolver.ts

Jak vidíte, jediným požadavkem na implementaci rozhraní Resolve směrovače Angular je, aby naše třída měla metodu resolve. Cokoli bude z této metody vráceno, budou resolvovaná data.

Tady vracíme observable, které po 2sekundovém zpoždění zabalí řetězec.

Konfigurace trasy

Nyní můžeme nastavit náš směrovací modul tak, aby zahrnoval náš resolver:

app-routing.module.ts

Všimněte si, že náš resolver je poskytován stejně jako služba a pak resolver zahrneme do naší definice trasy. Zde budou vyřešená data dostupná pod klíčem zprávy.

Přístup k vyřešeným datům v komponentě

V komponentě můžeme přistupovat k vyřešeným datům pomocí vlastnosti data objektu snímku ActivatedRoute:

A to je vše, co potřebujeme. Nyní můžeme v naší komponentě přistupovat k naší zprávě Hello Alligator! takto:

<p>the message: {{ data.message }}</p>

Při přechodu na trasu si všimnete, že nyní dochází k dvousekundovému zpoždění, protože data jsou nejprve resolvována.

Resolving Data From an API

Přibližme si nyní situaci tím, že skutečně získáme nějaká data z API. Zde vytvoříme službu, která bude získávat data z API serveru Hacker News.

Tady je naše jednoduchá služba, kde také použijeme nového klienta HttpClient:

hn.service.ts

A nyní můžeme změnit náš resolver na něco takového:

hn.resolver.ts

Přístup k parametrům trasy

Přístup k aktuálním parametrům trasy v resolveru můžete získat pomocí objektu ActivatedRouteSnapshot. Zde je příklad, kdy bychom pomocí našeho resolveru získali přístup k parametru id aktuální trasy:

hn.resolver.ts

Naše trasa může vypadat takto:

{ path: 'post/:id', component: PostComponent, resolve: { hnData: HnResolver }}

A zde je metoda getPost v naší službě:

getPost(postId: string) { const endpoint = 'https://hnpwa.com/api/v0/item'; return this.http.get(`${endpoint}/${postId}.json`);}

Pokud nyní uživatel přejde například na http://localhost:4200/post/15392112, budou vyřešena data pro příspěvek id 15392112.

Obsluha chyb

V případě, že při načítání dat dojde k chybě, můžete chybu zachytit a vyřešit v resolveru pomocí operátoru catch v RxJS. Například něco takového:

Nebo byste mohli vrátit prázdný observable, v takovém případě nebude uživatel odeslán na novou trasu:

resolve() { return this.hnService.getTopPosts().catch(() => { return Observable.empty(); });}

.

Leave a Reply