@Coder321

Можно ли динамически создавать lazy load роуты в Angular 4?

У меня есть 5 разных модулей с разными темами приложения. Сейчас для каждой у каждой темы есть своя приставка в url, типо /firstTheme/page, /secondTheme/page и .т.д. Как вы сами видите это не совсем красиво. Можно ли как то динамически менять адресс для lazy load что бы получилось что то типа
export const routes = RouterModule.forRoot([
  {
    path: '',
    loadChildren: getPath()
  }
])

На вариант выше усердно матерится да и если бы заработало то при билде, по идеи построится только чанк того модуля, путь которого вернет getPath. Натыкался на router.resetConfig но будет ли он работать в моей ситуации? Может у кого есть решение такой задачи?
  • Вопрос задан
  • 362 просмотра
Пригласить эксперта
Ответы на вопрос 1
@denismaster
Нет. Приведу пример с использованием Webpack

В случае JIT-компиляции используется такой плагин, как angular-router-loader.
При работе сборщика он проходится по всем роутам, содержащим loadChildren и заменяет их на некоторое выражение:
{
        loadChildren: () => new Promise(resolve => {
            (require as any).ensure([], require => {
                resolve(require('./path/to/yourmodule').ModuleName);
            })
        })
}

После этого webpack может собрать их в определенные chunks - дополнительные js-файлы, которые содержат загружаемые модули.

В случае AOT-компиляции, используется @ngtools/webpack, который выполняет аналогичную работу, при этом он еще компилирует все компоненты в файлы *.ngfactory.ts. После этого webpack также генерирует чанки с этими фабриками.

В вашем же случае на этапе сборки значение не является константным, поэтому сборщик выдаст сообщение об ошибке.

Для решения этой проблемы может помочь отложенная загрузка вручную, например.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы