Ho più moduli, ognuno contenente vari componenti e un componente padre che deve contenere uno di questi componenti.
Dal momento che non riesco a utilizzare i percorsi per raggiungere questo obiettivo, ho creato un servizio che ha fornito un moduleName :string
e a compomnentName : string
restituisce la classe componente corrispondente.
Vedere ComponentDirectoryService
in questo stackblitz.
Sto imitando il modo in cui il modulo router consente ai moduli funzione di iniettare i propri percorsi:
ComponentDirectoryModule
ha unforRoot
eforChild
metodi a cui aDIRECTORY_ENTRIES
il valore è passato- ogni modulo funzione (p1 e p2 in stackblitz) chiama
forChild
per fornire il proprioDIRECTORY_ENTRIES
- AppModule chiama
forRoot
che fornisceComponentDirectoryService
passando nel cumulato (chiama aforChild
) valore diDIRECTORY_ENTRIES
Tutto funziona bene in modalità dev.
In modalità produzione tutto funziona, ma ricevo questo avviso spaventoso:
Impossibile risolvere tutti i parametri per ComponentDirectoryService in ... component-directory.service.ts: (?). Questo diventerà un errore in Angular v6.x
Ciò che mi confonde è che l'unico parametro del servizio sono le voci della directory ...
MODIFICA 1
Come Angular dichiara il token di iniezione ROUTES:
export const ROUTES = new InjectionToken<Route[][]>("ROUTES");
anche io per DIRECTORY_ENTRIES:
export const DIRECTORY_ENTRIES = new InjectionToken<ComponentDirectoryEntry[][]>("DIRECTORY_ENTRIES");
risposte:
1 per risposta № 1Nel compilatore mancano le informazioni su ciò che dovrebbe essere effettivamente iniettato nel tuo servizio.
Ecco perché è necessario utilizzare esplicitamente @Inject(<YOUR_INJECTION_TOKEN>)
decoratore per sottolineare che:
constructor(@Inject(DIRECTORY_ENTRIES) private entries: ComponentDirectoryEntry[]) { }
Ciò imposterà internamente il flag dei metadati sulla proprietà entries
e usando questi metadati Angular lo saprà DIRECTORY_ENTRIES
dovrebbe essere iniettato qui.