You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Angular指南中Routed NgModule与Routing NgModule的区别疑问

解惑Angular指南中Routed NgModule与Routing NgModule的区别

嘿,我太懂你这种困惑了!当初我第一次啃Angular的NgModule指南时,也在这俩概念上卡了好一会儿,咱们一步步拆解清楚~

先从你熟悉的Routing NgModule说起吧,这个其实就是你一直在用的“路由模块对”里的那个路由模块。它的核心职责就一个:专门管路由规则的配置,完全不碰业务逻辑。比如你写的UserRoutingModule,里面会定义路径和组件的映射,导入RouterModule.forChild(routes),然后导出RouterModule,让父模块(比如AppModule)能用上这些路由配置。举个实际的代码例子:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserListComponent } from './user-list.component';
import { UserDetailComponent } from './user-detail.component';

const routes: Routes = [
  { path: '', component: UserListComponent },
  { path: ':id', component: UserDetailComponent }
];

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

接下来就是你搞不懂的Routed NgModule——其实它就是你说的那个“领域NgModule”!只是换了个称呼而已。它的核心是封装某一块业务的所有组件、指令、管道,完全不涉及路由配置。简单说,它就是个纯业务模块,组件只能通过路由路径访问,不会被其他模块的模板直接引用(比如你不会在其他模块里写<app-user-list>)。

举个对应的例子,UserModule就是典型的Routed NgModule:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserListComponent } from './user-list.component';
import { UserDetailComponent } from './user-detail.component';

// 划重点:这里完全不导入路由模块!
@NgModule({
  declarations: [UserListComponent, UserDetailComponent],
  imports: [CommonModule]
})
export class UserModule { }

核心区别&为什么要这么拆分

  • 职责完全分离

    • Routing NgModule:只干路由配置这一件事,后期要改路径、加守卫,直接改这里就行,不用碰业务模块。
    • Routed NgModule:专注业务逻辑,组件、服务、业务规则都在这里,和路由完全解耦,就算哪天换个路由方案,业务模块也不用动。
  • 加载方式不同

    • Routing NgModule:会被父模块(比如AppModule)直接import,让路由规则全局生效。
    • Routed NgModule:不会被任何模块直接import!它是通过路由的loadChildren懒加载的,只有当用户访问对应的路径时,Angular才会加载这个模块,大大减少初始包的大小。比如在App路由里这么配置:
      const routes: Routes = [
        { path: 'users', loadChildren: () => import('./user/user.module').then(m => m.UserModule) }
      ];
      
  • 依赖关系清晰

    • Routing NgModule会依赖Routed NgModule里的组件(因为路由配置要指向这些组件),但Routed NgModule完全不依赖路由模块,独立性极强,甚至可以单独拿出来复用。

对你现有做法的补充

你之前用的“主模块+路由模块对”其实就是标准的Routed(领域)+ Routing组合,只是你之前没把“领域模块”和“Routed模块”划上等号而已。如果之前你在领域模块里导入了路由模块,其实也能跑,但更规范的做法是让业务模块彻底和路由解绑,把路由配置完全交给Routing模块来管。

这样拆分下来,你的代码结构会更清晰,维护起来也省心很多~

备注:内容来源于stack exchange,提问作者technicated

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:43:08