У меня есть рабочее пространство Angular 6 CLI, содержащее библиотеку с функциональными модулями.Каждый функциональный модуль содержит свои собственные маршруты, но я хочу, чтобы модуль маршрутизации библиотеки был родительским, поэтому путь должен фактически соответствовать макету: libraryA / featureA.
Решение, по-видимому, заключается в отложенной загрузке модуля библиотеки,но я не могу заставить его работать.Я начал с простой настройки, я создал новое приложение Angular с ng new
, затем я скачал Образец маршрутизатора и скопировал весь файл из router/src/app
в мою папку src/app
.Выполнение ng build
выявило первую ошибку:
ERROR in Could not resolve module app/admin/admin.module relative to /E/git/my-app/src/app/app-routing.module.ts
Итак, я начал сравнивать пример маршрутизатора с моим проектом и нашел различия в файлах tsconfig * .ts.Наборы образцов маршрутизатора baseUrl
в src/tsconfig.app.json
и src/tsconfig.spec.json
, где Angular CLI устанавливает его непосредственно в tsconfig.ts
.Поэтому я изменил его, чтобы он соответствовал образцу маршрутизатора, и он работал.
Но как заставить это работать, например, если crisis-center
является библиотекой (ng generate library crisis-center
) и не лежит в пределах src/app
?
Как настроить baseUrl
?Как выглядит loadChildren
(например, loadChildren: 'crisis-center/crisis-center.module#CrisisCenterModule'
)?Дело в том, что независимо от того, что я пытаюсь сделать, я застрял с сообщением об ошибке выше: Could not resolve module relative to ...
.
Я только что добавил проблемные части в свой публичный репозиторий на GitHub:
https://github.com/AndreasFagschlunger/o2xfs-angular/commit/8b0f8735d799943088e61a5c546e3c27d89f09b3
Так что вы можете git checkout
и попробовать сами, ng build operator
работает, но ng build
не работает независимо от того, что я установил в loadChildren
(app-routing.module.ts).
С наилучшими пожеланиями, Билли
Обходной путь
Не может быть все неправильно, так как обходной путь заключается в загрузке модулей синхронно, например, это прекрасно работает:
export function loadOperatorModule() {
return OperatorModule;
}
const appRoutes: Routes = [
{
path: 'operator',
loadChildren: loadOperatorModule
},
{ path: '', redirectTo: '/operator', pathMatch: 'full' }
];
То же самое относится к функциональному модулю (cdm) внутри библиотечного модуля (оператора), обходной путь работает, но никакой подсказки как установить loadChildren
со строковым значением, которое не выдает ошибку во время выполнения:
projects\operator\src\lib\operator-routing.module.ts
хочет лениво загрузить `projects \ operator \ src \ lib \ cdm \ cdm.module.ts
{ path: 'cdm', loadChildren: 'cdm/cdm.module#CdmModule' }
{ path: 'cdm', loadChildren: 'lib/cdm/cdm.module#CdmModule' }
{ path: 'cdm', loadChildren: './cdm/cdm.module#CdmModule' }