/
View ID generation guide

View ID generation guide

Migrated to MD

Tento článok vysvetľuje akým spôsobom funguje dynamické generovanie view IDs vo verziách 5.0.0 a vyšších.

Základné informácie

Pokiaľ chceme aby fungovalo ukladanie preferencii v nejakom view je nutné, aby toto view malo definované svoje view ID.

Novo vytvorené views pomocou schematikov sú generované s potrebnými providers na dynamické generovanie view IDs. Tieto sú nakonfigurované tak, aby autogenerované IDčka kopírovali štruktúru kľúčov v nae.json dokumente z ktorých boly vygenerované.

Spôsob generovanie view IDs

IDs sa generujú súhrou dvoch prvkov:

  • ViewIdService

  • NAE_VIEW_ID_SEGMENT injection token

ViewIdService

Dynamicky generuje view IDs kombináciou view ID nadradeného komponentu a id segmentu poskytnutého cez injection token. Na vygenerovanie ID nepotrebuje aby mal nadradený element priradené ID, ale potrebuje mať id segmentu.

Pokiaľ chceme zistiť ID aktuálneho view, musíme si injectnúť túto service, ktorá poskytuje metódu na získanie ID pre konkrétne view.

Keďže je generovanie ID dynamické, tak rovnaký komponent umiestnený na rôznych miestach v aplikácii bude mať iné view ID.

NAE_VIEW_ID_SEGMENT

Injection token, ktorý poskytuje kus view ID pre dané view.

Mechanizmus generovania View IDs

Mechanizmus generovania view IDs si demonštrujeme na vzorovom príklade. Predpokladajme, že máme aplikáciu so 4mi komponentami s nasledujúcou hierarchiou.

3 komponenty provide-ujú ViewIdService aj príslušný injection token. Posledný komponent neprovideúje žiaden z prvkov generujúcich view IDs.

View ID pre “koreňový“ komponent bude totožné s jeho id segmentom, keďže žiaden z jeho rodičovských komponentov nemá ID. t.j. View ID tohoto komponentu bude foo.

View ID podradeného, ľavého komponentu bude kombináciou ID nadradeného prvku a id segmentu. Rodičovské ID a segment sa kombinujú pomocou znaku pomlčka (-). View ID tohoto komponentu bude foo-bar.

Podradený, pravý komponent sa nepodieľa na dynamickom generovaní view IDs, keĎže neprovide-uje ViewIDService, ktorá je za generovanie IDčok zodpovedná. Pokiaľ by sme si v tomto komponente injectli ViewIdService a získali si z nej ID, dostali by sme ID nadradeného elementu: foo.

View ID posledného komponentu sa určuje rovnakým mechanizmom, ako ID ľavého komponentu. Teda sa získa ID nadradeného komponentu a skombinuje sa s poskytnutým id segmentom. View ID tohoto komponentu bude foo-baz.

View IDs pre tabbed views

Správanie generovania view IDs sa s ohľadom na tabbed views nemení. Základný mechanizmus je rovnaký.

Taby však automaticky poskytujú id segmenty pre karty, ktoré otvárajú.

Karty, ktoré sú otvorené od začiatku majú automaticky provide-ované id segmenty s hodnotou ich poradového čísla.

V kartách teda stačí provide-núť ViewIdService a tá skombinuje tento číselný segment s view id rodiča.

Pokiaľ chceme prepísať id segmentu pre konkrétnu kartu stačí v príslušnom komponente provide-núť iný id segment.

Všetkým kartám, ktoré sa otvárajú a nie sú otvorené od začiatku sa provide-uje id segment s hodnotou “dynamic“. Znamená to teda, že pokiaľ sa v nich bude provide-ovať ViewIdService, budú mať všetky dynamicky otvárané karty rovnaké view ID.

FAQ

Ako definovať statické view ID pre nejaký komponent?

Pokiaľ chceme aby mal nejaký komponent statické view ID bez ohľadu na jeho umiestnenie v strome komponentov je relatívne jednoduché takéto správanie zabezpečiť.

Postačuje za ViewIDService poskytnúť niečo, čo vráti počadované view ID.

{provide: ViewIdService, useValue: {viewId: 'staticViewId'}}

Treba si však dávať pozor, že všetky komponenty v strome pod týmto komponentom budú následne brať toto statické view ID ako rodičovské a budú svoje hodnoty generovať na základe neho.

Ako vypnúť ukladanie preferencií pre nejaké view?

Preferencie sa ukladajú iba pokiaľ je daný komponent schopný injectnúť ViewIdService. Pokiaľ nie je, tak sa preferencie neukladajú. Pokiaľ chceme, aby sa v nejakom komponente nedala resolvenúť ViewIdService stačí miesto nej provide-núť null.

{provide: ViewIdService, useValue: null}

Treba si však dať pozor, že všetky komponenty v strome pod týmto komponentom následne nebudú schopné získať rodičovské view ID a teda v nich začne generovanie view IDs od začiatku.

Related content