Angular 4+ Динамически включать модуль со всеми поставщиками и компонентами с компиляцией AOT и без viewRef

Что я пытаюсь сделать:

Я в основном пытаюсь воссоздать loadChildren вне маршрутизатора. Я хочу включить различные модули в зависимости от того, есть ли у пользователя к ним доступ. Ленивая загрузка маршрутизатора не совсем подходит по разным причинам. Я написал кое-что, что компилируется в webpack, но не в angular.

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

Я хочу получить из db список плагинов или модулей, к которым у пользователя есть доступ, использовать System.import, чтобы захватить эти модули с приложением, компилируемым в AOT, а затем с помощью компилятора angular скомпилировать их во время выполнения и сделать эти модули доступными для экземпляр приложения без обязательного рендеринга компонента после компиляции.

Что я наделал:

У меня это работает в webpack, который в настоящее время захватывает модуль и компилирует его. Проблема в том, что модуль не известен как angular в компиляции AOT, и поэтому ни один из компонентов, служб или подмодулей не доступен для приложения.

Образец моего кода:

load(parentInjector: Injector, path): Promise<NgModuleFactory<any>> {

return System.import(path).then((module: any) => {
  this.compiler.compileModuleAndAllComponentsAsync(module['ModuleName'])
    .then((compiled) => {
      let moduleReference = compiled.ngModuleFactory.create(parentInjector);

      return moduleReference
    }).then((moduleReference) =>{
    console.info(moduleReference)
  })
}); }

Примечание:

Опять же, мне не нужен viewref, поскольку я не пытаюсь что-либо визуализировать, я просто хочу, чтобы эти модули были доступны для приложения только в том случае, если у пользователя есть к ним доступ. Спасибо за любую помощь.

Есть ли причина, по которой вы не можете использовать защиту маршрута, чтобы пользователи не могли переходить к модулям, к которым у них нет доступа?

Daniel W Strimpel 10.03.2018 21:45

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

Nathaniel Erwin 10.03.2018 22:03
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
410
0

Другие вопросы по теме