Angular开发(十八)-路由的基本认识

2023-11-19

一、学单词:angular路由中涉及到很多新单词词汇

单词 说明 使用场景
Routes 配置路由,保存URL对应的组件,以及在哪个RouterOutlet中展现
RouterOutlet 在html中标记挂载路由的占位容器
Router 在ts文件中负责跳转路由操作 Router.navigate([“/xxx”]),Router.navigateByUrl(“/xxx”)
routerLink 在html中使用页面跳转 <a [routerLink]="['/xx']"
routerLinkActive 表示当前激活路由的样式 routerLinkActive=”active”
ActivedRoute 获取当前激活路由的参数, 这个是一个类,要实例化,使用实例化后的对象.params,xx.queryParams
redirectTo 重定向 redirectTo=”/路径”
useHash 使用哈希值展现 {useHash:true}
pathMatch 完全匹配 pathMatch:”full”

二、实现一个简单的路由

  • 1、使用angular-cli创建一个带路由的项目
  • 2、手动配置路由文件

  • 2.1使用nagular-cli创建一个带路由的项目

    • ng new 项目名称 --routing
    • 会多创建一个app-routing.module.ts文件代码如下

      import { NgModule } from '@angular/core';
      import { Routes, RouterModule } from '@angular/router';
      
      const routes: Routes = [
        {
          path: '',
          children: []
        }
      ];
      
      @NgModule({
        imports: [RouterModule.forRoot(routes)],
        exports: [RouterModule],
        providers: []
      })
      export class AppRoutingModule { }
      
  • 2.2手动配置路由文件

    • app文件夹下面创建一个app.router.ts文件,基本结构代码如下:

      /**
       * 定义路由跳转页面
       */
      //引入路由文件
      import {Routes, RouterModule} from "@angular/router";
      import {ModuleWithProviders} from "@angular/core";
      //引入挂载到路由上的组件
      ....
      //配置一个路由数组
      const rootRouterConfig : Routes = [
          {path:"路径",component:组件名称},
          {path:"page4",component:组件名称,
              children:[
                  {path:"路径",component:...},
                  {path:"路径",component:...}
              ]
          }
      ]
      
      //对外暴漏出去
      export const rootRouterModule : ModuleWithProviders = RouterModule.forRoot(rootRouterConfig,{useHash:true});
    • 在根模块中

      //引入自己定义的路由
       import {rootRouterModule} from "./app.router";
       @NgModule({
        ....
         imports: [
           BrowserModule,
           FormsModule,
           HttpModule,
           rootRouterModule
         ],
         providers: [],
         bootstrap: [AppComponent]
       })
       export class AppModule { }

三、一个简单的路由案例代码,使用了redirectTo做重定向

import { NgModule } from '@angular/core';
    import { Routes, RouterModule } from '@angular/router';
    import {Page1Component} from "app/page1/page1.component";
    import {Page2Component} from "app/page2/page2.component";

    const routes : Routes = [
      {path: '',redirectTo:"/page1",pathMatch:"full"},
      {path: 'page1',component:Page1Component},
      {path: 'page2',component:Page2Component},
    ];

    @NgModule({
      imports: [RouterModule.forRoot(routes)],
      exports: [RouterModule],
      providers: []
    })
    export class AppRoutingModule { }
<div class="container" style="margin-top:50px;">
    <div class="row">
        <div class="col-md-2">
            <ul class="list-group">
                <li class="list-group-item"><a [routerLink]="['/page1']">列表一</a></li>
                <li class="list-group-item"><a [routerLink]="['/page2']">列表二</a></li>
            </ul>
        </div>
        <div class="col-md-10" style="border:1px solid #ddd;padding-bottom:50px;padding-top:50px;">
            <router-outlet></router-outlet>
        </div>
    </div>
</div>

四、添加404页面

如果用户输入的url地址不正确,或者输入的地址不存在跳转到指定的路径,使用”**”去匹配,路由会先从上面匹配,如果匹配不成功就会往下匹配

const routes : Routes = [
      {path: '',redirectTo:"/page1",pathMatch:"full"},
      {path: 'page1',component:Page1Component},
      {path: 'page2',component:Page2Component},
      {path: '**',component:Page404Component},
    ];

五、在TS文件中通过事件绑定跳转页面实现切换路由

在ts文件中实现路由的跳转有两种方式:本人建议用第一种,跟html页面中保持一致
  • 1、navigate里面穿的一个数组
  • 2、navigateByUrl里面传递一个字符串
import { Component, OnInit } from '@angular/core';
    import {Router} from "@angular/router";

    @Component({
      selector: 'app-page404',
      templateUrl: './page404.component.html',
      styleUrls: ['./page404.component.css']
    })
    export class Page404Component implements OnInit {

      constructor(private router:Router) { }

      ngOnInit() {
      }
      topage1(){
        this.router.navigate(["/page1"]);
      }
      topage2(){
        this.router.navigateByUrl("/page2");
      }
    }

六、实现选择当前路由高亮显示

  • 1、在html页面中添加routerLinkActive=”样式名称”

    <ul class="list-group">
        <li class="list-group-item"><a [routerLink]="['/page1']" routerLinkActive="active">列表一</a></li>
        <li class="list-group-item"><a [routerLink]="['/page2']" routerLinkActive="active">列表二</a></li>
    </ul>
  • 2、在样式表中定义active样式

七、路由实现两个组件之间切换传递参数,主要有两种方式

  • 1、path方法传递参数
  • 2、query方法传递参数

    7.1 通过path方式传递参数

    • 1、配置传递path参数路由
 {path: 'page2/:id1/:id2',component:Page2Component},
  • 2、修改html代码
<li class="list-group-item"><a [routerLink]="['/page2',1,2]" routerLinkActive="active">列表二</a></li>
  • 3、修改Page2Component的ts文件

    import {Component, OnInit, OnDestroy} from '@angular/core';
    import {ActivatedRoute} from "@angular/router";
    export class Page2Component implements OnInit,OnDestroy {
          private id1 : number;
          private id2 : number;
          private sub:any;
          constructor(private _activatedRoute:ActivatedRoute) { }
    
          ngOnInit() {
            this.sub = this._activatedRoute.params.subscribe(params=>{
              console.log(`parames参数:${params}`)
              this.id1 = params["id1"];
              this.id2 = params["id2"];
              console.log(`获取的参数id1:${this.id1},id2:${this.id2}`)
            })
          }
      //组件卸载的时候取消订阅
          ngOnDestroy() : void {
            this.sub.unsubscribe();
          }
    }

    7.2 通过navigate传递path参数

    this.router.navigate(["/page1",参数1,参数2]);
    //或者是这样
    this.router.navigateByUrl("/page2/参数1/参数2");

    7.3通过query传递参数

    • 1、修改html页面添加传递参数

      <li class="list-group-item"><a [routerLink]="['/page1']" [queryParams]="{id:1,name:'hello',age:20}" routerLinkActive="active">列表一</a></li>
    • 2、修改ts代码使用queryParams获取传递参数

      import {Component, OnInit, OnDestroy} from '@angular/core';
      import {ActivatedRoute} from "@angular/router";
      
      @Component({
          selector: 'app-page1',
          templateUrl: './page1.component.html',
          styleUrls: ['./page1.component.css']
      })
      export class Page1Component implements OnInit,OnDestroy {
          private sub:any;
          private id:number;
          private name:string;
          private age:number;
          constructor(private _activatedRoute:ActivatedRoute) { }
      
          ngOnInit() {
              this.sub = this._activatedRoute.queryParams.subscribe(queryParams=>{
                  console.log("queryParams参数:",queryParams);
                  this.id = Number.parseInt(queryParams["id"]);
                  this.name = queryParams["name"];
                  this.age = Number.parseInt(queryParams["age"]);
              })
          }
          ngOnDestroy(){
              this.sub.unsubscribe();
          }
      }
    • 3、通过navigate传递query参数

      this.router.navigate(["/page1"],{queryParams:{"id":"10","name":"word","age":"30"}});
    • 4、通过navigateByUrl传递query参数
      javascript
      this.router.navigateByUrl("/page1?name=hello&id=2&age=20");

八、配置子路由

  • 1、修改路由文件

    const routes : Routes = [
      {path: '',redirectTo:"/page1",pathMatch:"full"},
      {path: 'page1',component:Page1Component},
      {path: 'page2/:id1/:id2',component:Page2Component},
      {path: 'page3',component:Page3Component,children:[
        {path:"",redirectTo:"page31",pathMatch:"full"},
        {path:"page31",component:Page31Component},
        {path:"page32",component:Page32Component},
      ]},
      {path: '**',component:Page404Component},
    ];
  • 2、在page3html页面修改

    <button class="btn btn-danger" [routerLink]="['./page31']">page31</button>
    <button class="btn btn-danger" [routerLink]="['./page32']">page32</button>
    <router-outlet></router-outlet>

九、辅助路由(兄弟路由)就是一个页面中使用多个路由插座<router-outlet></<router-outlet>

使用方式:

  • 1、在<router-outlet name="xxx"></<router-outlet>定义别名
  • 2、在路由文件中增加一个outlet的属性,如:{path: 'page1',component:Page1Component,outlet="xxx"}

十、demo案例地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular开发(十八)-路由的基本认识 的相关文章

随机推荐

  • Python pyecharts数据可视化

    Python pyecharts数据可视化 绘制精美图表 一 数据可视化 1 pyecharts介绍 2 初入了解 1 快速上手 2 简单的配置项介绍 3 案例实战 1 柱状图Bar 2 地图Map 省份 城市 地区 3 饼图Pie Pie
  • 【SMTP】【POP】电子邮件相关协议分析

    一 实验环境 通过普通路由器连接英特网的计算机一台 通过VMWare安装的Linux虚拟机一台 抓包工具 Wireshark 邮件处理软件 Foxmail 二 实验原理 SMTP工作原理 SMTP提供了一种邮件传输的机制 当收件方和发件方都
  • 公司实战 ElasticSearch+Kafka+Redis+MySQL

    一 需求 前一段时间公司要进行数据转移 将我们ES数据库中的数据转移到客户的服务器上 并且使用定时将新增的数据同步 在这过程中学到了很多 在此记录一下 二 技术栈 Mysql Redis ElasticSearch Kafka 三 方案 为
  • Ant Design Pro + Ant Design + React 踩坑记录

    1 自定义封装组件 1 1 组件通信 1 1 1 父传子 在本项目中对因为删除组件比较通用 所以对删除组件进行了封装 如下图我们对定义了通用删除组件 通过props传入回调方法 这样页面上只需要引用该组件 并传入自定义的删除函数即可引入 我
  • 单向链表实现(C语言)

    目录 一 简介 概念介绍 链接存储方法 结点结构 头指针head和终端结点 二 单向链表的使用 1 数据结构 2 从尾部添加append 3 从头部添加 add head 4 在链表任一指定位置节点按升序插入节点 5 查找并删除指定节点 6
  • [透彻]为什么要前后端分离?

    前后端分离的意义 前后端分离 已成为互联网项目开发的业界标准使用方式 前后端分离 会为以后的大型分布式架构 弹性计算架构 微服务架构打下坚实的基础 核心思想 前端页面调用后端的restuful api接口 并使用json数据进行交互 服务器
  • ug建模文本怎么竖着_【UG三维造型】:UG NX三维特征孔

    UG NX是集CAD CAM CAE功能于一体的软件集成系统 是当今较为流行的一种数控模具设计软件 主要是因为其功能强大 包括了世界上最强大 最广泛的产品设计应用模块 数控编程模块 模具设计模块 工程制图模块 装配设计模块 钣金设计模块 运
  • 第12课:生活中的构建模式——想要车还是庄园

    用程序来模拟生活 从剧情中思考构建模式 与工厂模式的区别 与组合模式的区别 构建模式的模型抽象 类图 基于升级版的实现 模型说明 应用场景 故事剧情 下周就要过年了 这是 Tony 工作后的第一个春节 还是在离家这么远的北京工作 所以肯定不
  • Ribbon负载均衡(三)SpringCloud Ribbon负载均衡详解及实现

    SpringCloud Ribbon负载均衡实现 文章目录 SpringCloud Ribbon负载均衡实现 1 User客户端调用方 1 1 修改User服务 Pom文件 引入Ribbon 1 2 RibbonConfiguration配
  • 经典算法题:大数乘法之乘法累加算法 Karatsuba算法(远远超出long long范围)

    问题 超过100位数字的整数的乘法 无法直接调用 运算 例如 求 1234567891011121314151617181920 2019181716151413121110987654321 的乘积结果 需要转化成数组问题或者字符串问题求
  • VMWare Ubuntu 共享文件夹失效解决办法

    VMWare Ubuntu 共享文件夹失效解决办法 Ubuntu 是 16 04 sudo vmhgfs fuse host mnt hgfs o allow other o uid 1000
  • 华为OD机试真题- 找数字【2023Q2】【JAVA、Python、C++】

    题目描述 给一个二维数组nums 对于每一个元素num i 找出距离最近的且值相等的元素 输出横纵坐标差值的绝对值之和 如果没有等值元素 则输出 1 例如 输入数组nums为 0 3 5 4 2 2 5 7 8 3 2 5 4 2 4 对于
  • float\double 型变量怎么判断是否大于、小于、等于 0

    刷题的时候做了这样一题 include
  • 机械键盘按键失灵解决办法(亲测有效,不用换不用拆,5分钟搞定)

    机械键盘不灵的小伙伴们 有福音了 不用换不用拆 只需要一根牙签 一把美工刀 或者剪刀 一瓶酒精 或者免洗消毒液 就可以修好上百块钱的东西 5分钟搞定 这两天不知道为啥机械键盘的ctrl键居然失灵了 有时候可以有时候不好用 怎么回事 一个上百
  • Windows下Git及TortoiseGit安装、配置及使用

    文章目录 1 Git TortoiseGit安装及配置 2 Git 常用命令 2 1 新建代码库 2 2 配置 2 3 增加 删除文件 2 4 代码提交 2 5 分支 2 6 查看信息 3 Git 样例 3 1 首次提交本地代码至远程仓库
  • AD22PCB库增大黑色区域的面积

  • 运维常用面试题及答案

    介绍一下你的运维经验和技能 答案 在回答这个问题时 可以简要概述你的运维经验和技能 包括你的工作经历 参与的项目 使用的工具和技术等 重点突出你在系统监控 故障排除 自动化部署 容量规划和安全性等方面的经验和技能 你在日常工作中使用过哪些自
  • 【C++11】shared_ptr

    1 shared ptr内存模型 shared ptr 包含了一个指向对象的指针和一个指向控制块的指针 每一个由 shared ptr 管理的对象都有一个控制块 它除了包含强引用计数 弱引用计数之外 还包含了自定义删除器的副本和分配器的副本
  • 剑指 Offer 58 - I. 翻转单词顺序--学到点小知识

    class Solution public String reverseWords String s String strings s trim split StringBuilder sb new StringBuilder for in
  • Angular开发(十八)-路由的基本认识

    一 学单词 angular路由中涉及到很多新单词词汇 单词 说明 使用场景 Routes 配置路由 保存URL对应的组件 以及在哪个RouterOutlet中展现 RouterOutlet 在html中标记挂载路由的占位容器 Router