Vue动态路由、动态路由如何进行参数的传递、$router和$route的区别、命名路由、命名视图

news2024/11/22 16:22:42

一、什么是动态路由

​        将URL地址中可变的内容设置成参数,根据不同的参数渲染不同的组件。(组件可以复用

二、动态路由如何进行参数的传递

​        1. 如何设置URL地址中的参数:“/url/:参数名

​        2. 在组件中接收参数:this.$route.params.参数名

三、$router和$route的区别

​        1. $router

​ ​       (1)是VueRouter的实例,是一个全局的路由对象。用户可以在任何地方使用

​​        (2)包含了所有的路由对象(实际代表的路由文件 — 路由表、路由模式),包含了许多关键的对象和属性

​​        (3)用法:在编程式导航中,可以通过$router进行路由跳转(push、replace)

​        2. $route

​ ​        (1)代表当前正在跳转的路由对象,是一个局部对象

​ ​        ​ ​        <router-link to='/login/123>登录</router-Tink>

​ ​        (2)每个路由都有一个$route对象

​ ​        (3)用法:this.$route后面跟name、path、params、query,可以通过$route可以获取对应的name,path,params,query等路由信息

四、示例

​        1. 创建数据文件:assets/books.js

​        2. 创建组件:

​           Books.vue:显示图书列表(显示图书名称)

​ ​          Book.vue:显示图书的详细信息(由路由参数id)

​        3. 创建路由文件:src/router/index.js

​        4. 在main.js文件中注册自定义的路由器

​        5. 在App.vue中通过超链接渲染Books.vue组件

​        6. 修改路由文件:src/router/index.js

​        7. 修改Books.vue中的<router-link>和<router-view>

//1. 创建数据文件:assets/books.js

export default [
    {
        isbn:1001,
        bookName:'西游记',
        bookAuthor:'吴承恩',
        publish:'商务印书馆'
    },
    {
        isbn:1002,
        bookName:'红楼梦',
        bookAuthor:'曹雪芹',
        publish:'商务印书馆'
    },
    {
        isbn:1003,
        bookName:'水浒传',
        bookAuthor:'施耐庵',
        publish:'商务印书馆'
    },
    {
        isbn:1004,
        bookName:'三国演义',
        bookAuthor:'罗贯中',
        publish:'商务印书馆'
    },
]
//2.1 创建组件:Books.vue:显示图书列表(显示图书名称)

<template>
  <div>
    <h2>图书列表</h2>
    <ul>
      <li v-for="(item,index) in bookList" :key="index" style="list-style-type: none">
       <router-link :to="'/books/book/'+item.isbn">{{ item.bookName}}</router-link>
      </li>
    </ul>
    <hr/>
    <router-view></router-view>
  </div>
</template>

<script>
import books from "@/assets/books";
export default {
  name: "Books",
  data(){
    return {
      bookList:books
    }
  }
}
</script>

<style scoped>

</style>
//2.2 创建组件:Book.vue:显示图书的详细信息(由路由参数id)

<template>
<div>
  <h2>图书详情</h2>
  <p>{{ book.isbn}}</p>
  <p>{{ book.bookName}}</p>
  <p>{{ book.bookAuthor}}</p>
  <p>{{ book.publish}}</p>
</div>
</template>

<script>
import books from '../assets/books'

export default {
  name: "Book",
  data(){
    return {
      book:{}
    }
  },
  created() {//当组件创建时,从books数组中找到对应的图书
    this.book = books.find((item)=>{
      // if(item.isbn == this.$route.params.id){
      //   return item
      // }
      return item.isbn == this.$route.params.id
    })
  },
  //对$route路由对象进行监听,当它发生改变时,更新this.book
  watch:{
    '$route':{
      handler:function (){
        this.book = books.find((item)=>{
          return item.isbn == this.$route.params.id
        })
      }
    }
  }
}
</script>

<style scoped>

</style>
//3. 创建路由文件:src/router/index.js

import Vue,{h} from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter)

const router = new VueRouter({
    routes:[
        {
            path:'/books',
            component:()=> import('../components/Books'),
        }
    ],
    mode:"history"
})
export default router
//4. 在main.js文件中注册自定义的路由器

import Vue from 'vue'
import App from './App.vue'

import router from "@/router";

Vue.config.productionTip = false

new Vue({
  render: function (h) { return h(App) },
  router
}).$mount('#app')
//5. 在App.vue中通过超链接渲染Books.vue组件

<template>
  <div id="app">
    <router-link to="/books">图书信息</router-link>
    <img alt="Vue logo" src="./assets/logo.png">
    <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: 'App',
  components: {

  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
//6. 修改路由文件:src/router/index.js

import Vue,{h} from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter)

const router = new VueRouter({
    routes:[
        {
            path:'/books',
            component:()=> import('../components/Books'),
            children:[
                {
                    path:'/books/book/:id', //动态路由的路径,id是参数名,它是可变的
                    component:()=> import('../components/Book')
                }
            ]
        },
    ],
    mode:"history"
})
export default router

五、路由中的查询参数

​        1. 查询参数的格式:在URL地址中带参数,例如:“/url地址?参数名1=参数值1&参数名2=参数值2”

        2. 在组件中接收查询参数:this.$route.query.参数名

       3. 示例:通过查询参数实现动态路由的效果

​        1. 创建组件:

​           Student.vue:在组件中接收查询参数(由路由参数id)

​        2. 创建路由文件:src/router/index.js

​        3. 在main.js文件中注册自定义的路由器

​        4. 在App.vue中通过超链接渲染Student.vue组件

//1. 创建组件:Student.vue:在组件中接收查询参数(由路由参数id)

<template>
<div>
  <p>学生编号:{{ this.$route.query.sid}}</p>
</div>
</template>

<script>
export default {
  name: "Student"
}
</script>

<style scoped>

</style>
//2. 创建路由文件:src/router/index.js

import Vue,{h} from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter)

const router = new VueRouter({
    routes:[
        {
            path:'/stu',
            component:()=> import('../components/Student')
        }
    ],
    mode:"history"
})
export default router
//3. 在main.js文件中注册自定义的路由器

import Vue from 'vue'
import App from './App.vue'

import router from "@/router";

Vue.config.productionTip = false

new Vue({
  render: function (h) { return h(App) },
  router
}).$mount('#app')
//4. 在App.vue中通过超链接渲染Student.vue组件

<template>
  <div id="app">
    <router-link to="/stu?sid=1001">学生1</router-link>
    &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;
    <router-link to="/stu?sid=aaa">学生2</router-link>
    <img alt="Vue logo" src="./assets/logo.png">
    <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: 'App',
  components: {

  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

六、命名路由

       1. 什么是命名路由?

      ​ 在路由表中给路由项设置name属性

        2. 在 < router-link >中使用name进行映射

        3.示例

//1. 创建组件:Employee.vue:显示员工的详细信息

<template>
  <div>
    <h2>员工信息</h2>
    <p>编号:0x001</p>
    <p>姓名:曹操</p>
    <p>性别:男</p>
  </div>
</template>

<script>
export default {
  name: "Employee"
}
</script>

<style scoped>

</style>
//2. 创建路由文件:src/router/index.js

import Vue,{h} from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter)

const router = new VueRouter({
    routes:[
            path:'/employee',
            name:'emp',
            components: { employee:() => import('../components/Employee') }
    ],
    mode:"history"
})
export default router
//3. 在main.js文件中注册自定义的路由器

import Vue from 'vue'
import App from './App.vue'

import router from "@/router";

Vue.config.productionTip = false

new Vue({
  render: function (h) { return h(App) },
  router
}).$mount('#app')
//4. 在App.vue中通过超链接渲染Student.vue组件

<template>
  <div id="app">
    <router-link :to="{ name:'emp'}">员工信息</router-link>
    <img alt="Vue logo" src="./assets/logo.png">
    <router-view name="employee"></router-view>
  </div>
</template>

<script>

export default {
  name: 'App',
  components: {

  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

七、命名视图

        1. 给< router-view >指定名称:在使用时如没有给< router-view >设置名称,默认为default,可以定义多个路由视图,每个路由视图都指定名称

        2. 在路由表中给路由项添加components属性:将组件渲染到给定名称的视图中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境下配置Nginx

文章目录安装环境配置安装Nginx需要安装第三方的开发包安装Nginx启动并访问Nginx安装完毕Linux——centos7版本 安装环境配置 Nginx是C语言编写的&#xff0c;所以需要配置C语言编译环境&#xff08;要联网&#xff09; 安装gcc环境 [roota ~]# yum install gcc-c 已加载插件…

【Unity3D编辑器扩展】Unity3D中解决Text的清晰度问题

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在程序开发中&#xff0c;常常会遇到Unity中Text文字不清晰的问…

中兴服务器迈络思NS312网卡down掉网口物理指示灯不熄灭解决方法--NS312型号ConnectX-4 Lx

中兴服务器迈络思NS312网卡down掉网口物理指示灯不熄灭解决方法–NS312型号ConnectX-4 Lx 中兴服务器做网卡倒卡测试时&#xff0c;出现如下问题&#xff1a; 中兴服务器迈络思网卡&#xff0c;卡片NS312&#xff0c;型号ConnectX-4 Lx&#xff0c;万兆网卡在执行ifdown或ip l…

SmartZone ICR/OCR Professional 7.2 NET Crack

SmartZone ICR/OCR 专业版 v7.2 采集 by Ω578867473 检测并报告字体属性、字体大小和大写字母高度。特征 检测并报告字体属性、字体大小、大写字母高度和基线详细信息&#xff0c;作为 Microsoft Windows 上单个字符识别结果的一部分。检测和报告图像方向并识别图像&#xff0…

Spring的生命周期

Spring作为当前Java最流行、最强大的轻量级框架&#xff0c;受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里&#xff0c;我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也…

【云原生进阶之容器】第四章Operator原理4.1节--定制资源(Custom Resource)

1 定制资源概述 定制资源(Custom Resource) 是对 Kubernetes API 的扩展。 本页讨论何时向 Kubernetes 集群添加定制资源,何时使用独立的服务。 1.1 定制资源 资源(Resource) 是 Kubernetes API 中的一个端点, 其中存储的是某个类别的 API 对象的一个集合。 例如内置的 …

Revit中墙连接方式和墙连接显示及修改问题

关于Revit墙连接方式、显示及其调整修改的理解&#xff0c;首先我们要来理清楚几个问题 1、什么是Revit墙连接&#xff1f; 在Revit里墙与墙之间的连接就是墙连接&#xff0c;它可以是同类型墙之间的连接&#xff0c;也可以是不同类型墙之间的连接&#xff0c;可以是2堵墙、3…

【链表】leetcode面试题 02.07. 链表相交(C/C++/Java/Js)

leetcode面试题 02.07. 链表相交1 题目2 思路2.1 思路一2.2 思路二(强推--5行代码&#xff09;3 代码3.1 C版本3.1.1思路一&#xff1a;3.1.2 思路二3.2 C版本3.2.1 思路一3.2.2 思路二3.3 Java版本3.3.1 思路一3.3.2 思路二3.4 JavaScript版本4 总结1 题目 给你两个单链表的头…

【进阶C语言】动态内存管理+柔性数组

文章目录1.动态内存的开辟内存的布局内存池内存碎片内存泄漏2.动态内存函数malloc功能函数calloc功能函数realloc功能函数开辟时遇到的两种情况free功能函数3.  建议4.柔性数组特性&#xff1a;定义使用优点1.动态内存的开辟 内存的布局 我们常用的内存开辟函数都是在堆区开辟…

几个特殊的运算符重载(前置\后置++、前置\后置--、<<、>>)

几个特殊的运算符重载 概念 运算符重载是一个非常重要的概念&#xff0c;在运算符重载中我们可以重新定义 运算符 的具体含义&#xff0c;一个运算符重载函数的定义是 T operator 运算符 (参数) &#xff0c;对于运算符重载有以下重点。 以下讨论的都是双操作数的运算符 双操…

uniapp: 本应用使用HBuilderX x.x.xx 或对应的cli版本编译,而手机端SDK版本是 x.x.xx。不匹配的版本可能造成应用异常。

目录场景与问题描述&#xff1a;原因分析&#xff1a;解决方案&#xff1a;方案一&#xff1a;更新HbuilderX版本方案二&#xff1a;设置固定的版本方案三&#xff1a;忽略版本&#xff08;不推荐&#xff09;场景与问题描述&#xff1a; 项目场景&#xff1a;示例:通过使用Hb…

【docker13】Dockfile

1.Dockerfile是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本 自己的理解是&#xff1a;将多次繁琐的commit命令构成一个Dockerfile文本然后一次性执行完成&#xff0c;可以简化复杂程度 Dockerfile官网 构建三部…

Docker部署 registry

系列文章目录 Docker部署 registry Docker搭建 svn Docker部署 Harbor Docker 部署SQL Server 2017 Docker 安装 MS SqlServer Docker部署 Oracle12c Docker部署Jenkins Docker部署 registry系列文章目录前言一、registry搭建二、使用步骤1. pull registry2. run image3. 验证…

通过gcloud创建Google Kubernetes Engine(GKE)并通过kubectl访问

1 简介 GKE(Google Kubernetes Engine)是一个K8s平台&#xff0c; 我们可以使用gcloud来创建GKE集群。在开始之前&#xff0c;可以查看&#xff1a;《初始化一个GCP项目并用gcloud访问操作》。 2 创建GKE集群 2.1 打开API 在创建集群之前&#xff0c;需要打开Google API&am…

图扑数字孪生水利工程,助力水资源合理利用

前言从大禹治水到三峡大坝的建造&#xff0c;人类为控制和调配自然界的地表水和地下水&#xff0c;修建了许多的水利工程。对水资源进行了广泛的开发利用&#xff0c;诸如农业灌溉、工业和生活用水、水力发电、航运、港口运输、淡水养殖、旅游等。将图扑软件与 GIS、粒子仿真、…

力扣算法(Java实现)—字符串入门(9题)

文章目录1.反转字符串2.整数反转3.字符串中的第一个唯一字符4.有效的字母异位词5.验证回文串6.字符串转换整数 (atoi)7.实现strStr()8.外观数列9.最长公共前缀&#x1f48e;&#x1f48e;&#x1f48e;&#x1f48e;&#x1f48e; 更多资源链接&#xff0c;欢迎访问作者gitee仓…

STM32那些事

STM32芯片型号命名方式STM32开发板的GPIO编程GPIO的函数调用顺序&#xff1a;&#xff08;1&#xff09;使能GPIO时钟&#xff1a;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);第一个参数是GPIO对象&#xff0c;第二个参数是枚举使能&#xff08;2&#xff09;初始化…

Python - 数据容器tuple(元组)

目录 定义元组 元组的相关操作 修改元组 元组的删除 转换为元组tuple 定义元组 元组同列表一样&#xff0c;都是可以封装多个、不同类型的元素在内。 但最大的不同点在于&#xff1a;元组一旦定义完成&#xff0c;就不可修改 元组定义&#xff1a;定义元组使用小括号&…

第二章.线性回归以及非线性回归—梯度下降法

第二章.线性回归以及非线性回归 2.5 梯度下降法 1.流程&#xff1a; 初始化θ0,θ1 不断改变θ0,θ1&#xff0c;直到J(θ0,θ1)到达一个全局最小值或局部极小值 2.图像分析&#xff1a; 1).图像层面分析代价函数&#xff1a; ①.红色区域表示代价函数的值比较大&#xff0…

leetcode 1443.Minimum Time to Collect All Apples in a Tree(收集苹果所需最短时间)

给出节点个数n, edges是连接的边&#xff0c;[a,b]是连接的两个顶点。 hasApple表示第 i 个顶点上是否有苹果。 走一条边需要耗时1s, 从顶点0出发&#xff0c;最后回到顶点0, 问收集所有苹果所需最短的时间。 思路&#xff1a; &#xff08;1&#xff09;DFS 可以把问题简化…