/ / risolutore componente dinamico angolare5 - angolare, dipendenza-iniezione, angolare5, angolare-aot, angolare6

risolutore dinamico angolare5 - angolare, dipendenza-iniezione, angolare5, angolare-aot, angolare6

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 un forRoot e forChild metodi a cui a DIRECTORY_ENTRIES il valore è passato
  • ogni modulo funzione (p1 e p2 in stackblitz) chiama forChild per fornire il proprio DIRECTORY_ENTRIES
  • AppModule chiama forRoot che fornisce ComponentDirectoryService passando nel cumulato (chiama a forChild) valore di DIRECTORY_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 № 1

Nel 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.