Angular 路由

路由的五个关键对象:

这里写图片描述

【注意:使用路由前应该先检查是否安装了@angular/router。如果没有,先使用命令:ng g router 下载相关依赖的包。】

Routes

Routes(路由配置),一般在app.routing.module.ts文件里配置,Routes里面是一组路由对象,每个对象有两个属性:path(路由对象的路径)+component(路由对象的组件),即,当我导航到某一个路径(path)上时,angular会显示哪个组件(component)

<!-- app.module.ts里面的设置-->
import{Routes, RouterModule} from "@angular/router";//先引入Routes
const routes: Routes = [ 
{path: '',component:HomeComponent }, //当路径为空时,显示home组件

{path: 'product',component:ProductComponent},//当路径为product时显示product组件
{path: 'product/:id', component:ProductComponent}
{path:'**',component:Code404Component},//这个是通配符路由,当匹配不到导航的路径时,就会跳转到自己设定的code404组件
];
//注意:路径是有顺序的。如果把通配符放在了第一位,那么久找不到后面的页面了。

RouterOutlet

插座:当我用路由根据path导航到某个组件时候,这个组件会显示到这个插座的后面

<!-- app.component.html里面的设置-->
<div class="col-md-9">
        <router-outlet></router-outlet> //  通过路由设置,在插座这显示不同内容。
      </div>

Router

router在运行时执行路由的对象

routerLink用斜杠开头表示导航到根路由,./表示导航到子路由,这里我们是导航到根路由,所以点击主页之后会去app-routing.modules(路由配置)里面找到我们的所有根路由,然后找到名字匹配的根路由,展示相应的组件

<!-- 通过页面链接跳转的  -->
<a [routerLink]="['/']">主页</a>
<a [routerLink]="['/product',1]">商品详情</a>

ActivedRoute

当前激活路由对象,主要用于保存路由,获取路由传递的参数。

1.参数快照(snapshot):

import { Component, OnInit } from "@angular/core";
import { ActivatedRoute } from "@angular/router";
@Component({
selector: 'app-product',
templateUrl: './product.component.html',
styleUrls: ['./product.component.css']
})
export class ProductComponent implements OnInit {
//声明一个变量来接收路由传递过来的productId
private productId:number; 
//定义一个构造方法,注入ActivatedRoute参数
constructor(private routeInfo: ActivatedRoute) { }
ngOnInit() {
 //通过参数快照获得传递过来的id参数的值,然后赋给了productId
this.productId=this.routeInfo.snapshot.queryParams["id"]; 
  }
}

2.参数订阅(subscribe):

import { Component, OnInit } from "@angular/core";
    import { ActivatedRoute } from "@angular/router";
    import { Params } from "@angular/router";
    @Component({
    selector: 'app-product',
    templateUrl: './product.component.html',
    styleUrls: ['./product.component.css']
    })
    export class ProductComponent implements OnInit {
    private productId:number; //定义一个变量来接收路由传递过来的productId
    constructor(private routeInfo: ActivatedRoute) { } 
    ngOnInit() {
    //参数订阅,订阅后声明一个匿名函数来处理传递过来的参数,从参数取出id 
       this.routeInfo.params.subscribe((params:Params)=>this.productId=params["id"]);
      }
    }

猜你喜欢

转载自blog.csdn.net/ght886/article/details/80579067