美文网首页
Angular路由

Angular路由

作者: 嘤夏影 | 来源:发表于2018-09-29 11:07 被阅读33次

    在项目创立的最初期,我们应该想到任何项目都会有路由跳转。所以在创建新项目的时候我们就可以把router一并安装好,
    创建新项目并安装路由命令:

    ng new my-app --routing
    

    这样安装的项目会自动配置好路由,无需下面的操作!!!

    —————————————————————————————————————

    如果在最开始直接是使用ng new my-app新建的项目,可以在后期安装router:

    npm install @angular/router -s
    

    那么我们需要在app文件夹下新建一个app-routing.module.ts文件:
    app-routing.module.ts

    import { NgModule } from '@angular/core';
    import {Routes,RouterModule} from "@angular/router";
    import {HomeComponent} from "./home/home.component"
    import {code404} from "./code404/code404.component"
    
    const routes: Routes = [
        {path:'',component:HomeComponent}//配置路由
        {path:'**',component:code404}//配置404页面
    ];
    
    @NgModule({
        imports:[RouterModule.forRoot(routes)],
        exports:[RouterModule],
        providers:[]
    })
    export class AppRoutingModule {}
    

    然后在app.module.ts中添加:

    import {AppRoutingModule} from './app-routing.module'
    @NgModule({
      declarations: [// 源数据,只能声明组件、指令和管道
        AppComponent , HomeComponent
      ],
      imports: [
        BrowserModule,//开发web必备模块
        AppRoutingModule
      ],
      providers: [{ 
          provide: [], 
          useValue: []
        }],//只能声明服务
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    最后在app.component.html中:

      <router-outlet></router-outlet>
    

    在html模板中使用a链接进行页面跳转:

    <a [routerLink]="['/']">首页</a>
    

    模板中页面跳转如上,在事件中用js实现页面跳转如下:

    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-footer',
      templateUrl: './footer.component.html',
      styleUrls: ['./footer.component.css']
    })
    export class FooterComponent implements OnInit {
    
      constructor(private router: Router) { }//这样可以拿到router对象
    //事件方法
    toclick(){
        this.router.navigate(["/"])
    }
      ngOnInit() {
      }
    
    }
    

    —————————————————————————————————————

    路由传参:

    第一种方法:
    在查询参数中传递数据

    地址栏显示这样!


    image.png

    html中:

    <a [routerLink]="['/test']" [queryParams]="{id:1}">首页</a>
    

    test组件中获取地址栏参数:

     import { Component, OnInit } from '@angular/core';   
    @Component({
      selector: 'app-footer',
      templateUrl: './footer.component.html',
      styleUrls: ['./footer.component.css']
    })
    export class FooterComponent implements OnInit {
      private testId:number;//声明一个数据用来存放获取到的路由参数
      constructor(private routeInfo: ActivatedRoute) { }//这样可以获取到参数
      ngOnInit() {
        this.testId = this.routeInfo.snapshot.queryParams["id"];
      }
    
    }
    

    .................................................................................................

    第二种方法:
    在路由路径中传递参数

    地址栏显示这样!


    image.png

    相比上一种方法,这种方法需要在路由配置中设置路由可以添加参数:

    //在app-routing.module.ts中
    {path:'test/:id',component:PageOneComponent},
    

    html中:

    <a [routerLink]="['/test',1]">首页</a>
    

    test组件中获取地址栏参数:

     import { Component, OnInit } from '@angular/core';   
    @Component({
      selector: 'app-footer',
      templateUrl: './footer.component.html',
      styleUrls: ['./footer.component.css']
    })
    export class FooterComponent implements OnInit {
      private testId:number;//声明一个数据用来存放获取到的路由参数
      constructor(private routeInfo: ActivatedRoute) { }//这样可以获取到参数
      ngOnInit() {
        this.testId = this.routeInfo.snapshot.params["id"];
      }
    
    }
    

    特别注意:当路由是从一个路由到另外一个路由跳转传递参数时,使用

    this.testId = this.routeInfo.snapshot.params["id"];
    

    在同一个路由下面只改变参数就要参数订阅,则不使用上面的代码,而是使用如下代码:

    this.routeInfo.params.subscribe((params:Params) => this.testId = params["id"];)
    

    —————————————————————————————————————

    重定向路由:

    //在app-routing.module.ts中
    const routes: Routes = [
        {path:'',redirectTo:'/home',pathMatch:'full'},//重定向路由
        {path:'home',component:HomeComponent},
    ];

    相关文章

      网友评论

          本文标题:Angular路由

          本文链接:https://www.haomeiwen.com/subject/kgjvoftx.html