一、Angular路由配置
1.首先在创建项目时要注意创建项目路由
2.在app-routing.module.ts中引入需要配置的组件,然后声明访问路径
import { HomeComponent } from './components/home/home.component';import { HeaderComponent } from './components/header/header.component';import { NewsComponent } from './components/news/news.component';import { NewDetailComponent } from './components/new-detail/new-detail.component';import { HeaderDetailComponent } from './components/header-detail/header-detail.component';const routes: Routes = [{path:'home',component:HomeComponent},{path:'header',component:HeaderComponent},{path:'news',component:NewsComponent},{path:'',component:HomeComponent},{path:'newsDetail/:id',component:NewDetailComponent},{path:'headerDetail/:id',component:HeaderDetailComponent}];//另外可以设置匹配不到路由的跳转页面{path:'**', redirectTo:'home'}
3.找到app.component.html根组件模板,配置router-outlet显示动态加载的路由
<h1><a routerLink="/home">首页</a><a routerLink="/news">新闻</a></h1><router-outlet></router-outlet>
4.设置选中高亮(或者其他)样式
<h1><a routerLink="/home" routerLinkActive="active">首页</a><a routerLink="/news" routerLinkActive="active">新闻</a></h1><router-outlet></router-outlet>//设置样式.active{color: red;}
父子路由的配置
{path:'',component:ProductComponent,children:[{path:'cart', component: CartComponent},{path: "pcontent",component: PcontentComponent}]}
二、自定义模块
适用于大型项目时,自定义模块来组织项目
在这里我们创建三个自定义模块,每个 模块有几个组件
1.创建模块
//创建模块时配置路由ng generate module modules/自定义模块名 --routing //加入这个参数就会在自定义模块中多一个配置路由的文件//自定义模块区别于内置模块的是它仅有一个ts文件和一个配置路由的文件
2.为自定义模块创建根组件
ng generate component modules/自定义模块名//就会生成自定义模块跟组件,包含四个文件//在自定义模块的ts文件中暴露组件exports: [UserComponent], /*暴露组件让其他模块里面可以使用暴露的組件*/
3.在根模块中动态挂载自定义模块,即实现模块的懒加载
- 先回顾一下在跟模块中如何挂载自定义组件,我们需到app-routing.module.ts中“引入所有组件,然后在配置数组中写入对应关系,如下图所示:

- 注意:我们现在在根模块路由到自定义模块不再需要像上面那样引入了。
- 先看app-routing.module.ts文件如何配置

- 与配置组件不同,routes数组的对象的第二个属性是”loadChildren”,而组件的是”component”。为了实现跳转,现在app.component.html中写如下代码:

- 因为我们上面在app-routing.module.ts文件中只是配置它会导航至自定义模块,但是在自定义模块又如何导航还没有配置,所以现在还要去自定义模块路由文件实现路由配置,教他怎么导航,在子模块配置导航至自身所拥有的组件就跟最上面的配置一样了,需要引入组件:

- 实现结果:

- 这已经实现了懒加载,我们接下来在自定义模块加入组件,在自定义模块同样配置路由:


- 实现结果

- 注意,这样实现的方式,其组件都是加载到app.component.html的标签中:

- 但是如果是父子组件的话,就不是所有组件内容都加载到app.component.html中的router-outlet标签了,而是加载到父组件的router-outlet标签。
- 代码如下:在自定义模块中实现父子组件

- 在一个组件中引入另一个组件,实现父子组件关系



- 父子组件的子组件只挂载到父组件的router-outlet标签中。
路由懒加载
在angular中路由既能加载组件又能加载模块,而我们说的懒加载实际就是说的加载模块,
1.加载组件使用的是component关键字
2.加载模块使用的是loadChildren关键字
//当前版本有两种写法{path: 'dynamic',loadChildren: './modules/dynamic/dynamic.module#DynamicModule'// loadChildren: () => import('./modules/dynamic/dynamic.module').then( m => m.DynamicModule)}
