angular - Sprístupnenie komponentov vnoreným modulom


Takže teraz mám nastavenie, ktoré vyzerá takto:

  • Modul aplikácie

    • Veľký modul

      • Ďalší veľký modul

        • Komponent
        • Ďalší veľký modul
        • Komponent

        • Veľký modul
        • Ďalší veľký modul
        • Komponent

Komponent NEMÁ prístup ku komponentom načítaným v Veľkom Module, aj keď sú tieto komponenty definované ako deklarácie a exporty Veľkého Modulu.

Existuje nejaký spôsob, ako môžem dať vnorenému modulu Another Large Module prístup k importom komponentov z A Large Module, aby jeho detské komponenty mali k týmto komponentom prístup? Alebo je potrebné, aby boli tieto deklarované priamo v Another Large Module, aby jeho detské komponenty k nim mali prístup?

Odpoveď č. 1

Musíte importovať veci do modulu, ak komponenty v ňom deklarované používajú tie veci. Môžete vytvoriť funkčný modul, ktorý importuje/exportuje/deklaruje súbor komponentov a používať ho vo vašich ostatných moduloch.

- App Module
   - FeatureA Module
   - FeatureB Module
   - Large Module (import FeatureA Module)
       - Component [can use components from FeatureA; 
                    can't use components from FeatureB]
       - Another Large Module (import FeatureA Module, FeatureB Module)
           - Component [can use components from FeatureA and FeatureB]

Ak sú vaše Large Module a Another Large Module načítané len na vyžiadanie, budete mať FeatureA module v oboch súboroch/balíkoch, ale pár extra kilobajtov neublíži. Ďalšou výhodou je znovupoužiteľnosť, môžete použiť modul funkcií aj v iných projektoch:

- Different App Module
   - FeatureA Module
   - FeatureB Module
   - Different Large Module (import FeatureA Module)
       - Component [can use components from FeatureA; 
                    can't use components from FeatureB]

Odpoveď č. 2

Ak chcete zdieľať komponenty medzi modulmi, najjednoduchší spôsob je vytvoriť shared.module.ts :

const SHARED_COMPONENTS = [];

const SHARED_MODULES = [];

@NgModule({
  declarations: [
    ...SHARED_COMPONENTS
  ],
  imports: [
    ...SHARED_MODULES
  ],
  exports: [
    ...SHARED_COMPONENTS,
    ...SHARED_MODULES
  ]
})
export class SharedModule { }

všimnite si kľúč 'exports', umožňuje vám naimportovať váš SharedModule kdekoľvek ho potrebujete vo vašej hierarchii a používať zdieľané komponenty odkiaľkoľvek.