Vue路由传参的几种方式

前言:顾名思义,vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效。传参方式可以划分为params传参和query传参,params传参又可以分为url中显示参数和不显示参数两种方式。具体区分和使用后续分析。

参考官网:https://router.vuejs.org/zh/guide/essentials/navigation.html

params传参(url中显示参数)

  • 文件结构

  • 定义路由:在定义path路由路径时定义参数名和格式,如  path: "/one/login/:num" ,router>index.js文件如下
/* eslint-disable*///第一步:引用vue和vue-router ,Vue.use(VueRouter)
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)//第二步:引用定义好的路由组件
import ChildOne from '../components/childOne'
import ChildTwo from '../components/childTwo'
import Log from '../components/log.vue'
import Reg from '../components/reg.vue'//第三步:定义路由(路由对象包含路由名、路径、组件、参数、子路由等),每一个路由映射到一个组件
//第四步:通过new Router来创建router实例
export default new Router({mode: 'history',routes: [{path: '/one',name: 'ChildOne',component: ChildOne,children:[{path:'/one/log/:num',component:Log,},{path:'/one/reg/:num',component:Reg,},],},{path: '/two',name: 'ChildTwo',component: ChildTwo}]
})
  • 在父路由组件上使用router-link进行路由导航,传参用<router-link to="/one/login/001">的形式向子路由组件传递参数。使用router-view进行子路由页面内容渲染,父路由组件childOne.vue 如下:
<template><div style="border:1px solid red;color:red;"><p>这是父路由childOne对应的组件页面</p><p>下面可以点击显示嵌套的子路由 </p><router-link to="/one/log/123">显示登录页面</router-link><router-link to="/one/reg/002">显示注册页面</router-link><router-view></router-view></div>
</template>
  • 子路由通过 this.$route.params.num 的形式来获取父路由向子路由传递过来的参数,子路由组件login.vue如下:
<template><div style="border:1px solid orange;color:orange;"><p>登录界面:这是另一个嵌套路由的内容</p><h3>{{this.$route.params.num}}</h3></div>
</template>

效果:

注意:如上所述路由定义的path: "/one/login/:num"路径和to="/one/login/001"必须书写正确,否则不断点击切换路由,会因为不断将传递的值显示添加到url中导致路由出错,如下

传递的值存在url中存在安全风险,为防止用户修改,另一种方式不在url中显示传递的值

 

params传参(url中不显示参数)

  • 定义路由时添加name属性给映射的路径取一个别名,router>index.js文件修改router如下:
export default new Router({mode: 'history',routes: [{path: '/one',name: 'ChildOne',component: ChildOne,children:[{path:'/one/log/',name:'Log',component:Log,},{path:'/one/reg/',name:'Reg',component:Reg,},],},{path: '/two',name: 'ChildTwo',component: ChildTwo}]
})
  • 在父路由组件上使用router-link进行路由导航,使用   <router-link :to="{name:'home',params:{id:001}}>    形式传递参数。注意   ': to= ' 前面的冒号,childOne.vue组件修改如下:
<template><div style="border:1px solid red;color:red;"><p>这是父路由childOne对应的组件页面</p><p>下面可以点击显示嵌套的子路由 </p><router-link :to="{name:'Log',params:{num:666}}">显示登录页面</router-link><router-link :to="{name:'Reg',params:{num:888}}">显示注册页面</router-link><router-view></router-view></div>
</template>
  • 子路由组件页面获取父路由传参方式不变,reg.vue 文件如下:
<template><div style="border:1px solid orange;color:orange;"><p>登录界面:这是另一个嵌套路由的内容</p><h3>子路由获取的参数:{{this.$route.params.num}}</h3></div>
</template>

 

注意:上述这种利用params不显示url传参的方式会导致在刷新页面的时候,传递的值会丢失;

 

 

使用Query实现路由传参

  • 定义路由 router>index.js文件如下:
export default new Router({mode: 'history',routes: [{path: '/one',name: 'ChildOne',component: ChildOne,children:[{path:'/one/log/',component:Log,},{path:'/one/reg/',component:Reg,},],},{path: '/two',name: 'ChildTwo',component: ChildTwo}]
})
  • 修改路由导航 <router-link :to="{path:'/one/log',query:{num:123}}"> ,childOne.vue 文件修改如下:
<template><div style="border:1px solid red;color:red;"><p>这是父路由childOne对应的组件页面</p><p>下面可以点击显示嵌套的子路由 </p><router-link :to="{path:'/one/log',query:{num:123}}">显示登录页面</router-link><router-link :to="{path:'/one/reg',query:{num:999}}">显示注册页面</router-link><router-view></router-view></div>
</template>
  • 子路由组件通过 this.$route.query.num 来显示传递过来的参数,reg.vue 文件如下:
<template><div style="border:1px solid purple;color:purple;"><p>注册界面:这是二级路由页面</p><h3>{{this.$route.query.num}}</h3></div>
</template>

效果如下:

 

 

PS: 在第一步的定义路由中我们都使用了mode:history 作用就是去除路由跳转时路由路径前的 “#”

常用的mode模式有两种:

默认为hash模式,最明显的标志是,URL上有#号 localhost:8080/#/,路由会监听#后面的信息变化进行路由匹配

另一种为history模式,不会有#出现,很大程度上对URL进行了美化。需要**注意**history模式在打包后的路由跳转需要服务器配合

默认不使用mode:history 如下

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

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

相关文章

常用html字符的转义字符串(html代码),全部转义字符备用

转义字符串&#xff0c;即字符实体&#xff08;Character Entity&#xff09;分成三部分&#xff1a; 第一部分是一个&符号&#xff1b; 第二部分是实体&#xff08;Entity&#xff09;名字或者是#加上实体&#xff08;Entity&#xff09;编号&#xff1b; 第三部分是一个分…

单行文字、多行文字溢出时省略号表示的多种解决方式;调整字符间距;段落首字母大写缩进效果;

文本溢出省略号表示的实现效果&#xff1a; 1、解决单行文字溢出&#xff1a; 解决方式&#xff1a; 在文字容器样式中添加 overflow:hidden; text-overflow:ellipsis; white-space: nowrap; 其中overflow:hidden;是在超出元素宽度范围时候不使用滚动条&#xff0c;text-ove…

Vuex使用详解,附加项目遇到的问题(简单明了)

Vuex的定义、个人理解和结构解析 vuex定义&#xff1a;vuex是一个专门为vue.js设计的集中式状态管理架构。 vuex的个人理解&#xff1a; 是存储公有状态数据state的一个仓库(store)&#xff1b;解决了大型应用时组件传参的繁杂和不易维护性&#xff1b;vuex的状态储存是响应的…

Chorme控制台console的用法;

前提&#xff1a;是谷歌浏览器&#xff01; IE8- 不支持console.log();会报错&#xff0c;解决如下&#xff1a; (function (){//创建空console对象&#xff0c;避免JS报错 if(!window.console) window.console {}; var console window.console; //添加console对象的方…

null、undefined、NaN区分解析和条件判定,以及在IF条件中的判定

NaN的理解和用法&#xff1a; NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值&#xff0c;来指示其不是数字值。 Number.NaN 是一个特殊值&#xff0c;说明某些算术运算&#xff08;如求负数的平方根&#xff09;的结果不是数…

vue项目中全局引用jquery 、引用外部js的多种方式(外部纯函数js、外部自执行js、外部js插件),附niceScroll滚动条插件使用

vue项目中全局引用jquery &#xff1a; 1、“ npm install jquery --save ” 命令安装jquery 2、在项目根目录下的 build 目录下找到webpack.base.conf.js 文件&#xff0c;在开头使用以下代码引入webpack&#xff0c;如下 var webpack require(webpack) 3、在webpac…

vue生命周期详解、钩子函数的调用(简单易懂)

定义&#xff1a;vue的生命周期是指vue实例从初始化创建到实例销毁的过程。期间会有8个钩子函数的调用。 vue的钩子函数图解&#xff1a; vue的钩子函数使用总结&#xff1a; 1、beforeCreate&#xff08;创建前&#xff09;:beforeCreate钩子函数&#xff0c;这个时候&#x…

vue-router详尽:编程式导航、路由重定向、动态路由匹配、路由别名、嵌套路由、命名视图

vue-router编程式导航 在vue项目中经常用到this.$router.push() 和 this.$router.replace() 方法进行路由跳转就是编程式导航。。。 通俗理解编程式导航&#xff1a;通过操作$router实例的JavaScript代码实现路由跳转。点击 <router-link :to"..."> 等同于调用…

java基础学习笔记(一)

java开发环境搭建&#xff1a;JDK配置 java 集成开发环境IDE&#xff08;Integrated Development Environment&#xff09; 》Eclipse工具 1、官网下载后安装elipse&#xff0c;注意&#xff1a;Eclipse 安装时JDK位数和Eclpise位数必须保持一致&#xff0c;安装过程中Switch…

常用矢量图有哪些格式?AI文件存储为psd分层

前言 下载的矢量图资源会发现有ai格式、cdr格式的、eps格式、icon格式&#xff0c;有的能使用Photoshop打开而有的不行。使用Photoshop保存矢量图时候选择什么格式保存都是经常遇到的问题。 常见问题及解决&#xff1a;PS打开ai格式的矢量图文件&#xff0c;你用PS打开发现只…

java基础学习笔记(二)

1、数组排序之选择法排序和冒泡排序&#xff1f; 选择法排序原理&#xff1a;数组第一位和后续位置数值比较&#xff0c;最大或最小的调换位置后放在第一位&#xff1b;依次比较将第二大或小的值调换位置后放在第二位置&#xff1b;代码如下&#xff1a; for (int j 0; j <…

java基础学习笔记(三)

1、装箱和拆箱 所有基本类型都有对应的类类型&#xff0c;比如int对应的类是Integer,这种类就叫做封装类。数字封装类有Byte、Short、Integer、Long、Float、Double这些类都是抽象类Number的子类。封装类和基本类型之间可以相互转换&#xff0c;而基本类型自动转封装类型就叫装…

名片设计尺寸及注意事项(详尽),附加:文字转曲线或外框字;网址、文字转二维码方法

附加&#xff1a; 文字如何转曲线或外框字&#xff1f;&#xff1f; "转曲"是在用Corl Draw(简称CD)或者Adobe Illustrator(简称AI)做图时对文字作的一项重要操作,因为如果不转曲的话在把文件拿到其它电脑上编辑时可能会因为缺少字体文件而不能正常显示文字!! 转曲…

AVI转MP4视频无损格式转码

前言&#xff1a;产品宣传需要无损avi转mp4转换格式 前期准备&#xff1a; 格式工厂 下载链接&#xff1a;https://pan.baidu.com/s/1WLD1ip9EaMdca_k2x7Zhvg 提取码&#xff1a;i4nx DIVX、AVC、HEVC三种压码格式的区别&#xff1a; DivX是早期的MPEG4视频压缩编码&…

vue-cli搭建和“Cannot find module npm-cli.js” 、“operation not permitted” 、 deprecated coffee-script等错误

前言&#xff1a;重装nodejs后&#xff0c; vue-cli搭建项目后运行vue项目报错报错 "npm Error: Cannot find module npm-cli.js" &#xff0c;同时发现npm -v 也报错。 分析: vue-cli脚手架模板是基于node下的npm来完成安装的&#xff0c;安装vue-cli也会先安装no…

websocket 学习--简单使用,nodejs搭建websocket服务器,到模拟股票,到实现聊天室

websocket简介&#xff1a; WebSocket协议是 HTML5 开始提供的一种基于TCP的一种新的全双工通讯的网络通讯协议。它允许服务器主动发送信息给客户端。 和http协议的不同&#xff1f;&#xff1f; HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型…

红队打靶练习:DIGITALWORLD.LOCAL: FALL

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 6、小结 目录探测 1、gobuster 2、dirsearch WEB 80端口 /test.php 文件包含漏洞 SSH登录 提权 get root and flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interfa…

vue全局安装jquery,vue使用bootstrap框架,vue中封装websocket通讯,vue引入element-ui 组件库,引入highcharts图表插件

vue安装jquery&#xff1a; 1、使用vue-cli创建好vue项目后&#xff0c;在项目文件夹下&#xff0c;使用命令npm install jquery --save-dev 引入jquery。 2、修改项目文件 build/webpack.base.conf.js&#xff0c;添加如下内容&#xff1a; var webpackrequire(webpack) mo…

flex弹性布局笔记

学习自菜鸟教程的flex布局笔记 布局的传统解决方案&#xff0c;基于盒装模型&#xff0c;依赖 display 属性 position 属性 float 属性。它对于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易实现。 简介&#xff1a; W3C提出了一种新的方案—-Flex布…

css宽高自适应布局,实现Sticky Footer的三种布局方式

宽度自适应布局&#xff1a; 1、使用场景&#xff1a; 一侧&#xff08;左侧或者右侧&#xff09;为固定的导航或者菜单栏&#xff0c;另一侧将会随着浏览器的缩放而自适应改变其大小。这种布局结构可用于顶层布局结构亦可用于某个局部功能块&#xff0c;常见于各种web系统&am…