Mám viac modulov, z ktorých každý obsahuje rôzne komponenty a rodičovský komponent, ktorý musí obsahovať jednu z týchto komponentov.
Pretože na to nemôžem použiť trasy, napísal som službu, ktorá dala a moduleName :string
a a compomnentName : string
vráti príslušnú triedu komponentov.
vidieť ComponentDirectoryService
v tento stackblitz.
Napodobňujem, ako modul routeru umožňuje funkčným modulom vstrekovať svoje vlastné trasy:
ComponentDirectoryModule
máforRoot
aforChild
metódy, ktorým aDIRECTORY_ENTRIES
hodnota je odovzdaná- volá každý modul funkcie (p1 a p2 v stackblitz)
forChild
poskytnúť jehoDIRECTORY_ENTRIES
- AppModule hovory
forRoot
ktorý stanovujeComponentDirectoryService
odovzdávanie kumulovaných (hovory naforChild
) hodnotaDIRECTORY_ENTRIES
Všetko funguje dobre v dev režime.
V produkčnom režime všetko funguje, ale dostávam toto strašidelné varovanie:
Nedajú sa vyriešiť všetky parametre pre ComponentDirectoryService v ... component-directory.service.ts: (?). Toto sa stane chybou v uhlovom v6.x
Čo ma zaujíma je to, že jediným parametrom služby sú položky adresára ...
EDIT 1
Rovnako ako Angular deklaruje token injekcie ROUTES:
export const ROUTES = new InjectionToken<Route[][]>("ROUTES");
tak urobím aj pre DIRECTORY_ENTRIES:
export const DIRECTORY_ENTRIES = new InjectionToken<ComponentDirectoryEntry[][]>("DIRECTORY_ENTRIES");
odpovede:
1 pre odpoveď č. 1Kompilátorovi chýbajú informácie o tom, čo by sa malo do vašej služby skutočne vstreknúť.
Preto musíte výslovne používať @Inject(<YOUR_INJECTION_TOKEN>)
dekoratérka na to poukázala:
constructor(@Inject(DIRECTORY_ENTRIES) private entries: ComponentDirectoryEntry[]) { }
Tým sa interne nastaví príznak metadát na vlastníctvo entries
a pomocou týchto metadát bude Angular vedieť DIRECTORY_ENTRIES
injekcia by sa tu mala podať.