Загрузите ngModule и его компоненты на основе условного выражения в Angular

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

В основном я хочу сделать что-то вроде:

if(user.deparment === 'coms') {
  //Use the communications.module and its components
}

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

Изображение приложения.module  введите описание изображения здесь

Communications.module изображение  введите описание изображения здесь


person devpato    schedule 10.04.2018    source источник


Ответы (2)


Вы можете выполнить простую тройную проверку, чтобы условно импортировать модуль. Нравится:

import { NgModule, Optional } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';

@NgModule({}) class MyModule {}

// toggle and watch the console
const production = true;

@NgModule({
  imports:      [ BrowserModule, production ? MyModule : []],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule {
  constructor(@Optional() module: MyModule) {
    console.log(module);
  }
}

Живая демонстрация

person Tomasz Kula    schedule 10.04.2018
comment
Рад, что смог помочь :) - person Tomasz Kula; 11.04.2018
comment
Вопрос, если я сделаю это на основе динамического значения, такого как user.deparment, будет ли это работать? некоторые пользователи могут быть частью другого отдела, поэтому у меня не может быть константы, и я буду знать ценность этого отдела только после того, как пользователь загрузит приложение - person devpato; 11.04.2018
comment
Этот подход будет работать только для статических значений. Если вы хотите настроить поставщиков, вы можете использовать forRoot статический метод angular. io / guide / ngmodule-faq # метод чего-то-forroot - person Tomasz Kula; 11.04.2018
comment
Вас также может заинтересовать juristr.com/blog/2018/01 / ng-app-runtime-config - person Tomasz Kula; 11.04.2018
comment
Я посмотрю на это! Спасибо - person devpato; 11.04.2018
comment
@TomaszKula Я хочу динамически импортировать модуль на основе третьей среды, но если я изменю const production на var, он не будет работать должным образом, есть ли другой способ импортировать его в зависимости от условий среды? - person Nikhil Radadiya; 13.03.2019

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

person Raksha Jayaram    schedule 10.04.2018
comment
так в принципе нет возможности решить, что не загружать с самого начала приложения? так что все загрузится, а затем, условно, я решу, что использовать, а что не использовать после того, как они были загружены в приложение .. потому что angular - это не - person devpato; 11.04.2018
comment
Да, если вы хотите использовать компонент, вы всегда должны объявлять его в модуле, поскольку он нужен angular для компиляции. При желании вы можете импортировать, как показано @Tomasz ниже - person Raksha Jayaram; 11.04.2018