Как добавить маршруты к угловым модулям только когда загружен - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть модуль, который имеет несколько маршрутов:

export const routes: Routes = [
    {
        path: '/some-util-path',
        component: SomeUtilComponent
    }
];

@NgModule({
    imports: [
        CommonModule,
        FormsModule,
        RouterModule.forRoot(routes)
    ],
    declarations: [
        // --- some components ---
    ],
    providers: [
        // --- some services ---
    ],
    exports: [
        // --- some exports ---
    ],
})
export class MyUtilModule {

}

Когда я импортирую этот модуль в app.module (корневой модуль), это работает нормально, но когда я импортирую его (также) вМодуль с отложенной загрузкой Я получаю

Error: RouterModule.forRoot() called twice. 
Lazy loaded modules should use RouterModule.forChild() instead.

Как настроить этот модуль Util таким образом, чтобы маршруты загружались как forRoot и forChild в зависимости от его варианта использования?

Я думаю, что я мог бы выделитьмаршруты и SomeUtilComponent к другому модулю, который я загружаю только в app.module, но мне интересно знать, возможно ли это только с одним модулем и условной логикой.

Я читал о статических методах forRoot и forChild, но я не знаю, как организовать импорт, так как вы можете указать только поставщиков.

1 Ответ

0 голосов
/ 05 февраля 2019

Привет, я думаю, вам нужно export const routing: ModuleWithProviders = RouterModule.forChild(routes);, чтобы заставить маршрутизацию работать, вот пример:

const routes: Routes = [{ path: '', component: LazyComponent }];
export const routing: ModuleWithProviders = RouterModule.forChild(routes);

, а затем в вашем ленивом загрузочном модуле сделайте следующее:

@NgModule({
  imports: [routing],
  declarations: [LazyComponent]
})
export class LazyModule {}

Вот статья: Ленивая загрузка модуля

С Угловой ввод-вывод относительно отложенной загрузки :

Возможно, вы заметили, что CLIдобавляет RouterModule.forRoot (маршруты) в массив импорта app-routing.module.ts.Это позволяет Angular знать, что этот модуль AppRoutingModule является модулем маршрутизации, а forRoot () указывает, что это корневой модуль маршрутизации.Он настраивает все маршруты, которые вы передаете ему, дает вам доступ к директивам маршрутизатора и регистрирует RouterService.Используйте forRoot () в AppRoutingModule, то есть один раз в приложении на корневом уровне.CLI также добавляет RouterModule.forChild (маршруты) к функциональным модулям маршрутизации.Таким образом, Angular знает, что список маршрутов отвечает только за предоставление дополнительных маршрутов и предназначен для функциональных модулей.Вы можете использовать forChild () в нескольких модулях.

...