导出数组和导出模块之间有什么区别?

时间:2019-04-01 21:26:17

标签: 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。如果是这种情况,为什么我们不能在@NgModule装饰器的导入中声明RouterModule?或者,为什么我们不能导出RouterModule路由?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我对声明导出数组和导出模块类之间的区别感到困惑吗?

导入另一个模块的模块不知道所有需要的依赖模块。因此,子模块可以 export 辅助模块,以便在导入子模块时将导入所有依赖项。

RouterModule.forChild(routes)

这将使用静态函数创建一个子模块。该子模块不包含RouterModule的功能,但用于使用此路由配置来配置路由器。

  

我的理解是,如果要导入TabsPageRoutingModule,例如在AppModule中,则我们的根应用现在具有在此模块中指定的定义的路由以及导出的RouterModule。

仅将RouterModule导入AppModule

路由配置通过依赖项注入暴露给路由器。 forChild()函数创建用于保存路由配置的提供程序。

  

如果是这种情况,为什么我们不能在@NgModule装饰器的导入中声明RouterModule?或者,为什么我们不能导出RouterModule路由?

我不确定我是否理解您的问题,但是使用单独的模块定义路由配置完全是可选的。您可以根据需要在RouterModule.forChild(...)内使用AppModule

您不需要将RouterModule导入TabsPageRoutingModule,因为它不使用它。该模块仅用于定义保存路由配置的提供程序。