Какой код мы пишем внутри класса, объявленного в декодере ngModule?

Я только начинаю изучать Angular. Я встретил несколько примеров, используя ngModule декораторы над пустым class.

Что я хочу знать... Является ли class объявлен непосредственно под декором ngModule, используемым только для инициализации модуля или же он служит для каких-либо других целей?

Ответ 1

вам нужно объявление класса для эффективного export. Модуль инициализируется с помощью импорта, но у вас есть доступ к функциям из экспорта класса (фактически, что вы импортируете?)

Надеюсь, что это помогло

EDIT -

"Тело класса пуст, но этот декоратор над классом (@NgModule) дает этому классу его функциональность. Так что действительно, этот класс не пуст. Он просто не требует дополнительной логики после на него применяется декоратор. bootstrapModule берет класс как ввод и предполагает, что этот класс украшен @NgModule, настроенным так же, как у вас (объявления, импорт, поставщики и т.д.)". from: Почему Angular экспортировать пустой класс в app.modules.ts?

Ответ 2

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

После компиляции он будет содержать аннотацию, которую вы использовали для украшения этого класса. Они будут использоваться angular для конфигурирования инжектора, особенно того, какой класс ему нужно создать, когда компоненту необходимо ввести данный тип члена.

Теперь вы можете поместить что-то в конструктор, например, если вы хотите что-то сделать в то время, когда модуль (и связанные компоненты/поставщики) вот-вот будет введен. Это единственное, что я могу сейчас подумать.

[edit] Я просто использовал его для регистрации локали, когда приложение запускается.

export class AppModule {
    constructor() {
        registerLocaleData(localeDeCH);
    }
}

Идея пришла от здесь, где они не указывают, куда звонить registerLocaleData

Ответ 3

Взгляните на официальную документацию для angular NgModules. https://angular.io/guide/ngmodules

Из этого следует следующее:

@NgModule принимает объект метаданных, который описывает, как скомпилировать шаблоны компонентов и как создать инжектор во время выполнения

Метаданные NgModule выполняют следующие действия:

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

Ответ 4

Вы можете, например, использовать конструктор или реализовать ngDoBootstrap для выполнения кода при первом загрузке ленивого загруженного модуля (инициализировано )

Вы также можете вводить сервисы конструктору, чтобы они были инициализированы DI, когда инициализировано приложение или ленивый загруженный модуль.

Я не могу вспомнить другие примеры. Кроме того, он несет только декоратор @NgModule() и предоставленную там информацию. (Может возникнуть некоторый дополнительный код, созданный при создании приложения)

См. также комментарий ngDoBootstrap в https://angular.io/guide/entry-components