Программная загрузка модулей в Angular 8+ (и Ivy-ready?)
Моему приложению необходимо загрузить динамически настроенный набор функциональных модулей (каждый со своими дополнительными маршрутами), которые индивидуально определяются файлом конфигурации (загружается с помощью XHR). Мой первоначальный план состоял в том, чтобы иметь список строк модуля (например, "plugins/my.module#MyModule") и использовать NgModuleFactoryLoader.load()
загрузить их во время начальной загрузки.
Теперь, когда я начал внедрять, я увидел NgModuleFactoryLoader
осуждается в пользу import()
форма LoadChildren
, который не будет работать в этом контексте (у меня есть только строки в конфигурации, никаких ссылок на модули).
Как я могу реализовать это в текущем (8+) Angular?
1 ответ
Это довольно большая тема, но NgModuleFactoryLoader
больше не будет работать, если вы используете компилятор Ivy. Потому что фабрик модулей больше нет, только определения инжекторов для классов модулей.
Существует совершенно новый Ivy API, и по размеру он не впишется в этот ответ.
Как вы просили меня в комментариях оставить ответ, так следующему исследователю будет проще. Это ссылка на статью об асинхронных модулях и компонентах в Angular Ivy. Он также доступен на indepth.dev, если ссылка Medium отсутствует.
Новая форма для реализации LazyLoading с импортом выглядит примерно так
{
path: '',
loadChildren: () =>
import('./dashboard/dashboard.module').then(
mod => mod.DashboardModule
)
}
Вы должны импортировать файл модуля с путем и затем выбрать реализацию модуля