Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么在模块中声明组件_Angular - Fatal编程技术网

Angular 为什么在模块中声明组件

Angular 为什么在模块中声明组件,angular,Angular,角度6.x 创建组件时,必须在声明部分的特定模块中对其进行分类,如: 乍一看,我认为这可以用来确保其他模块可以通过先导入模块来导入组件 但是我发现一个模块(app.routing.module)可以通过直接导入路径,导入在其他模块(app.module)中创建的组件,就像它根本没有导入app.module: app.routing.module.ts const routes: Routes = [ { path: '', redirectTo: '/dashboard', pathMat

角度6.x

创建组件时,必须在
声明
部分的特定模块中对其进行分类,如:

乍一看,我认为这可以用来确保其他模块可以通过先导入模块来导入组件

但是我发现一个模块(
app.routing.module
)可以通过直接导入
路径
,导入在其他模块(
app.module
)中创建的组件,就像它根本没有导入
app.module

app.routing.module.ts

const routes: Routes = [
  { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
  { path: 'dashboard', component: DashboardComponent },
  { path: 'detail/:id', component: HeroDetailComponent },
  { path: 'heroes', component: HeroesComponent }
];
这有什么意义吗


我不知道你为什么否决这篇文章,而我承认这对你来说可能是个愚蠢的问题。但请不要关上它


因为我真的被模块化系统搞糊涂了。由于我在官方示例中找不到必要性。

这两种配置完全不同,属于模块的组件应导入模块内。ts。需要在其他模块之间共享的组件应添加到
导出


但是,组件需要在routing.module.ts内指定路径,以便在使用不同路径导航应用程序时加载它们。

这两种配置完全不同,属于模块的组件应在module.ts内导入。需要在其他模块之间共享的组件应添加到
导出


但是,组件需要在routing.module.ts中指定路径,以便在使用不同路径导航应用程序时加载它们。

有三件事需要记住

  • 组件导出类

  • 这些导出的类可以导入到任何文件中。这些导入组件类的文件可能是typescript组件或模块

  • 模块只不过是文件,它使您能够捆绑您希望的组件,这些组件将协同工作并相互依赖。模块应该能够执行其业务逻辑,并且不应该依赖任何不是该模块一部分的东西来执行相同的逻辑

  • 可以在其他模块中导入模块。模块导出的组件和服务可以由其他模块导入
  • 就路由模块而言,将路由分离为单独的模块是一种很好的做法。这是因为,如果您正在制作一个涉及复杂逻辑和大量路由的应用程序,则应用程序模块文件将变得杂乱无章,因此可能涉及保护逻辑的路由应该分开
  • 如前所述,一个模块可以导入到另一个模块中。因此,可以在应用程序模块中导入路由模块。路由模块导入组件文件,因为它需要路径将路由到的组件的有效声明。应用程序模块还声明了这些组件,因为应用程序需要知道这些组件的存在
    有三件事要记住

  • 组件导出类

  • 这些导出的类可以导入到任何文件中。这些导入组件类的文件可能是typescript组件或模块

  • 模块只不过是文件,它使您能够捆绑您希望的组件,这些组件将协同工作并相互依赖。模块应该能够执行其业务逻辑,并且不应该依赖任何不是该模块一部分的东西来执行相同的逻辑

  • 可以在其他模块中导入模块。模块导出的组件和服务可以由其他模块导入
  • 就路由模块而言,将路由分离为单独的模块是一种很好的做法。这是因为,如果您正在制作一个涉及复杂逻辑和大量路由的应用程序,则应用程序模块文件将变得杂乱无章,因此可能涉及保护逻辑的路由应该分开
  • 如前所述,一个模块可以导入到另一个模块中。因此,可以在应用程序模块中导入路由模块。路由模块导入组件文件,因为它需要路径将路由到的组件的有效声明。应用程序模块还声明了这些组件,因为应用程序需要知道这些组件的存在
    app.routing.module
    不导入
    app.module
    ,但它可以直接使用组件。那么为什么我们必须声明和导出它们所属模块中的组件?它不直接使用组件,您需要再次导入app.routing.module iside app.module.ts。它只是配置了组件路径和路由。你的意思是
    app.module
    导入
    app.routing.module
    所以
    app.routing.module
    可以使用属于
    app.module
    的组件吗?不,你搞错了。我说它不使用组件。如果仔细观察,则不会在app.routing.module内使用或创建任何组件。这正是您所指的路由模块
    导入
    !=<代码>使用?我一直认为组件对于外部模块是不可见的。因此,
    app.routing.module
    如果不首先导入
    app.module
    ,则不应访问
    app.module
    中定义的组件。
    app.routing.module
    不导入
    app.module
    ,但它可以直接使用组件。那么为什么我们必须声明和导出它们所属模块中的组件?它不直接使用组件,您需要再次导入app.routing.module iside app.module.ts。它只配置了组件路径和路由。你是说
    app.module
    imports
    app.routing.moduleapp.routing.module.ts
    
    const routes: Routes = [
      { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
      { path: 'dashboard', component: DashboardComponent },
      { path: 'detail/:id', component: HeroDetailComponent },
      { path: 'heroes', component: HeroesComponent }
    ];