В чем разница между массивом экспорта и экспортом модуля?

#angular

#angular

Вопрос:

Я несколько смущен разницей между объявлением массива экспорта и экспортом класса модуля?

Например, у меня есть функциональный модуль:

 import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';

const routes: Routes = [
  {
    path: 'tabs',
    component: TabsPage,
    children: [
      {
        path: 'tab1',
        children: [
          {
            path: '',
            loadChildren: '../tab1/tab1.module#Tab1PageModule'
          }
        ]
      },
      {
        path: 'tab2',
        children: [
          {
            path: '',
            loadChildren: '../tab2/tab2.module#Tab2PageModule'
          }
        ]
      },
      {
        path: 'tab3',
        children: [
          {
            path: '',
            loadChildren: '../tab3/tab3.module#Tab3PageModule'
          }
        ]
      },
      {
        path: '',
        redirectTo: '/tabs/tab1',
        pathMatch: 'full'
      }
    ]
  },
  {
    path: '',
    redirectTo: '/tabs/tab1',
    pathMatch: 'full'
  }
];

@NgModule({
  imports: [
    RouterModule.forChild(routes)
  ],
  exports: [RouterModule]
})
export class TabsPageRoutingModule {}
  

Я понимаю, что если бы мы импортировали TabsPageRoutingModule, скажем, в AppModule, наше корневое приложение теперь имеет определенные маршруты, указанные в этом модуле, а также экспортированный RouterModule. Если это так, почему мы не могли объявить RouterModule при импорте в декораторе @NgModule? В качестве альтернативы, почему мы не можем экспортировать маршруты RouterModule?

Заранее спасибо!

Ответ №1:

Я несколько смущен разницей между объявлением массива экспорта и экспортом класса модуля?

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

 RouterModule.forChild(routes)
  

Это создает дочерний модуль с использованием статической функции. Этот дочерний модуль не содержит функций RouterModule , но используется для настройки маршрутизатора с этой конфигурацией маршрута.

Я понимаю, что если бы мы импортировали TabsPageRoutingModule, скажем, в AppModule, наше корневое приложение теперь имеет определенные маршруты, указанные в этом модуле, а также экспортированный RouterModule.

В него будет RouterModule импортирован только AppModule модуль.

Конфигурация маршрута предоставляется маршрутизатору посредством внедрения зависимостей. forChild() Функция создает поставщиков, которые хранят конфигурацию маршрута.

Если это так, почему мы не могли объявить RouterModule при импорте в декораторе @NgModule? В качестве альтернативы, почему мы не можем экспортировать маршруты RouterModule?

Я не уверен, что понимаю ваш вопрос, но использование отдельного модуля для определения конфигураций маршрутов является чисто необязательным. Вы можете использовать RouterModule.forChild(...) внутри вашего AppModule , если хотите.

Вам не нужно импортировать RouterModule в TabsPageRoutingModule , потому что он его не использует. Этот модуль существует только для определения поставщиков, которые поддерживают конфигурацию маршрута.

Комментарии:

1. Спасибо за ваш ответ. Некоторые последующие вопросы: Раздел 1: Не могли бы вы уточнить, что вы подразумеваете под дочерним модулем, не содержащим функций RouterModule? Причина, по которой я спрашиваю, заключается в том, что дочерний модуль импортирует RouterModule, поэтому это наводит меня на мысль, что он обладает функциями модуля Router, но скорее нуждается в нем для определения маршрутов, которые он затем предоставляет посредством внедрения зависимостей. Раздел 3 : Я полагаю, что другой способ задать вопрос таков: что именно я экспортирую в класс экспорта TabsPageRoutingModule {}. Экспортирую ли я то, что определено в теге метаданных в этом случае?