路由内容介绍
路由基础
路由对象列表
路由配置,保存着组件对应的URL,以及组件要展示的RouterOutlet
在Html中的占位符标签,标记了路由位置的展示位置
通过Router的navigate()和navigaterByUrl()方法实现导航到某个路由组件(控制器中使用)
通过RouterLink指定要导航到的路由组件(模板中使用)
当前激活的路由对象,保存着路由信息,如路由地址、路由参数
Routes
Routes对象存在于模块中,具有以下属性
示例:
const routes: Routes = [
// 普通路由
{path: '', component: HomeComponent},
// 普通路由
{path: 'product', component: ProductComponent},
// 路由重定向
{path: 'prod', redirectTo: '/product', pathMatch: 'full'},
// 通配符路由。需要放到路由的最后,当路由不存在时将导航到该路由指定的组件。
{path: '**', component: Code404Component}
];
注意:path不能以 "/" 开头哦。"/"应该写在routerLink中,详情请见RouterLink对象
RouterOutlet
RouterOutlet使用在HTML模板中,用于指定组件在页面上展示的位置。RouterOutlet在哪,路由URL对应的组件就会显示在RouterOutlet标签的下方。
<router-outlet></router-outlet>
routerLink
routerLink使用在模板的标签中,可为一个标签添加导航,常使用于标签中。routerLink的值为数组类型,数组的第一个元素为路由URL,第二个元素为路由传递时携带的参数(可选)
<a [routerLink]="['/']">主页</a>
<a [routerLink]="['/product']">商品详情</a>
<a [routerLink]="['/product']" [queryParams]="{id:1}">带参路由</a>
提示:当路由URL以"/"开头,表示该路由为根路由;以"./"开头,表示该路由为子路由。
Router
Router使用在控制器中,用于导航到指定路由。常使用的方法为navigate()和navigaterByUrl()方法。
import {Router} from '@angular/router';
constructor(private router: Router) {
}
onclick() {
this.router.navigate(['/']);
}
ActivatedRoute
新建路由 路由其实是一个特殊的模块 实战:为app模块创建一个名称为app-routing的路由 1.在app模块中新建app-routing.module.ts
ng g module app-routing
ng g module 路由名
2.app-routing.module.ts内容如下
const routes: Routes = [
{path: '', component: HomeComponent},
{path: 'product', component: ProductComponent}
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [RouterModule],
declarations: []
})
export class AppRoutingModule {
}
3.在app模块中引入app-routing模块
@NgModule({
imports: [
AppRoutingModule
]
})
新建带路由的项目
ng new router --routing
ng new 项目名 --routing
--routing 参数的作用:生成一个app-routing.module.ts路由模块并将其添加到项目根模块的依赖模块中。
const routes:Routes={
//注意path没有/哦 {prth:'',component:HomeComponent},
{path:'**',component:Code404Component}
}
constructor(private router:Router){
}
//注意有/哦 根路由 参数是一个数组
<a [routeLink]="['/']">主页</a>
./子路由
<route-outlet></route-outlet>
重定向路由
{path:'',redirectTo:'/home',pathMatch:'full'}
子路由
路由的父子关系。
{
path: 'product/:id', component: ProductComponent, children: [
{path: '', component: ProductDescComponent},
{path: 'seller/:id', component: SellerInfoComponent}
]
}
{
path: 'product/:id', component: ProductComponent, children: [
{子路由一},
{子路由二}
]
}
注意:使用子路由时,需要使用 "./" 格式。如下销售员信息
辅助路由
路由的兄弟关系。可以存在多个辅助路由
辅助路由的配置
// 普通路由
{path: '', component: HomeComponent},
// 辅助路由
{path: 'chat', component: ChatComponent, outlet: 'aux'}
{path: 'chat', component: ChatComponent, outlet: '辅助路由名称'}
辅助路由显示位置
<!--主路由-->
<router-outlet></router-outlet>
<!--名为aux的辅助路由-->
<router-outlet name="aux"></router-outlet>
<router-outlet name="辅助路由名称"></router-outlet>
辅助路由导航
<a [routerLink]="[{outlets:{aux:'chat'}}]">开始聊天</a>
<a [routerLink]="[{outlets:{aux:null}}]">结束聊天</a>
<a [routerLink]="[{outlets:{辅助路由名称:'辅助路由URL'}}]">开始聊天</a>
注意:辅助路由不带 "/" 。 扩展:一个便签控制两个路由
<a [routerLink]="[{outlets:{primary:'home',aux:'chat'}}]">开始聊天</a>
<a [routerLink]="[{outlets:{primary:'主路由URL',辅助路由名称:'辅助路由URL'}}]">开始聊天</a>