не может получить доступ к функциональным модулям без импорта - PullRequest
0 голосов
/ 30 ноября 2018

Мы создаем веб-приложение MEAN с Angular6.У нас есть определенные функциональные модули, скажем, FormGeneratorModule и GridGeneratorModule.

Мы хотим, чтобы они были импортированы только один раз в корневой appModule, и все остальные дочерние модули должны иметь к нему прямой доступ, т. Е. Не импортировать их в каждый дочерний модуль, который будет использоватьих.

Я провел исследование и соответствующим образом реализовал эти функциональные модули (с экспортом компонентов, которые будут использоваться, и все остальное).Я также импортировал BrowserModule в мой корневой модуль и CommonModule во все дочерние модули (для отложенной загрузки).Но это все еще не работает, мне все еще приходится импортировать эти функциональные модули всякий раз, когда я использую их в другом модуле.Это совершенно нежелательно, потому что это довольно тяжелые модули.

Для справки я помещаю здесь некоторые фрагменты кода:

root AppModule.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule as NgController, NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

import { HomeComponent } from '@L3Modules/default/controllers/home/home.component';
import { FormsModule } from '@L3Modules/default/controllers/forms/forms.module';
import { FormGeneratorModule } from '@L3Modules/core/controllers/formGenerator/formGenerator.module';
import { GridGeneratorModule } from '@L3Modules/core/controllers/gridGenerator/gridGenerator.module';


const routing: ModuleWithProviders = RouterModule.forRoot(routes);
@NgController({
  declarations: [
    HomeComponent
  ],
  imports: [
    BrowserModule,
    routing,
    HttpClientModule,
    BrowserAnimationsModule,
    FormsModule,
    FormGeneratorModule,
    GridGeneratorModule,
    NgbModule.forRoot()
  ]
})

Функциональные модули:

formGenerator.module.ts :

@NgModule({
imports: [
    CommonModule,
    ReactiveFormsModule,
    routing,
    NgbModule,
],
declarations: [
    FormGeneratorComponent,
   ...
],
exports: [
    ...ALL the components
],
entryComponents: [
    BComponent,
    AComponent,
    DComponent,
    ...

],
providers: [DService],
schemas: [NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA]

gridGenerator.module.ts :

declarations : [
    ChComponent,
    PUComponent,
    DTComponent,
],
imports : [
    CommonModule,
    ReactiveFormsModule,
    NgbModule,
    FormsModule
],
exports: [DTComponent],
providers: [],
entryComponents: [],
schemas: [NO_ERRORS_SCHEMA]

Было бы замечательно, если бы кто-то мог немного помочь мне здесь, я не могу придумать что-то, чего мне не хватает, чтобы избежать импорта этих гигантских функциональных модулей в каждый модуль, который их использует,Заранее спасибо.

1 Ответ

0 голосов
/ 01 декабря 2018

Вы можете просто импортировать свой AppModule в каждый функциональный модуль:

formGenerator.module.ts или gridGenerator.module.ts

import { AppModule } from './../app.module';

@NgModule({
  imports: [
    AppModule
    ...
  ]

Стоит отметить, что при этом нет никакого преимущества в производительности

...