Vue路由传参的几种方式
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 如下
Vue路由传参的几种方式的更多相关文章
- vue路由传参的三种方式以及解决vue路由传参页面刷新参数丢失问题
最近项目中涉及到跨页面传参数和后台进行数据交互,看到需求之后第一反应就是用路由传参来解决:Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下: 方法一:params传参: this.$r ...
- vue路由传参的三种方式区别(params,query)
最近在做一个项目涉及到列表到详情页的参数的传递,网上搜索一下路由传参,结合自己的写法找到一种适合自己的,不过也对三种写法都有了了解,在此记录一下 <ul class="table_in ...
- vue路由传参的三种方式
方式一 通过query方式传参 这种情况下 query传递的参数会显示在url后面 this.$router.push({ path: '/detail', query: { id: id } }) ...
- vue --- 路由传参的几种方式
方案一: getDescribe(id) { // 直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/describe/${id}`, }) ...
- vue路由传参的几种基本方式
原文地址 this.$router.push跳转 现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据.父组件中: <li v-for="article i ...
- vue-router 路由传参的几种方式,刷新页面参数丢失
常见场景:点击列表详情,跳转到详情内页,传递id参数获取详情数据. 我们先来看看路由跳转的几种方式: 1.通过params方式传参 通过$route.push的path携带参数方式 // 路由配置 { ...
- Vue-router路由传参的三种方式
本文简单介绍下三种路由传参: (1)在路由中配置 { path : ‘/home/:id’, name : ‘Dome’, component } 然后写调用的时候 this.$router.push ...
- vue里面路由传参的三种方式
1.方式一 通过query的方式也就是?的方式路径会显示传递的参数 HTML的方式<router-link :to="{name:xxx,query:{page:1,code:8899 ...
- vue 路由传参的三种基本模式
路由是连接各个页面的桥梁,而参数在其中扮演者异常重要的角色,在一定意义上,决定着两座桥梁是否能够连接成功. 在vue路由中,支持3中传参方式. 场景,点击父组件的li元素跳转到子组件中,并携带参数,便 ...
随机推荐
- CMU Database Systems - Database Recovery
数据库数据丢失的典型场景如下, 数据commit后,还没有来得及flush到disk,这时候crash就会丢失数据 当然这只是fail的一种情况,DataBase Recovery要讨论的是,在各种f ...
- js实现字符串切割并转换成对象格式保存到本地
// split() 将字符串按照指定的规则分割成字符串数组,并返回此数组(字符串转数组的方法) //分割字符串 var bStr = "www.baidu.con"; var a ...
- 随便贴两个漏洞,如 Apache JServ协议服务
1.Apache JServ协议服务 描述:Apache JServ协议(AJP)是一种二进制协议,可以将来自Web服务器的入站请求代理到 位于Web服务器后面的应用程序服务器.不建议在互联网上公开使 ...
- Qt QtXml读取xml文件内容
Qt QtXml读取xml文件内容 xml文件内容 <?xml version="1.0" encoding="UTF-8"?> <YG_RT ...
- [译]使用to_dict将pandas.DataFrame转换为Python中的字典列表
pandas.DataFrame.to_json返回的是JSON字符串,不是字典. 可以使用to_dict进行字典转换. 使用orient指定方向. >>> df col1 col2 ...
- EasyDSS高性能RTMP/FLV/HLS(m3u8)/RTSP流媒体服务器技术的HTTP QueryString URL的C++实现方案
EasyDSS支持HTTP GET接口访问,我们需要获取url的各种参数信息 比如 http://ip:port/action?a=1&b=2&c=3 我们需要知道对应的a.b.c的值 ...
- node 单例
ScriptManager.getInstance = function () { if (_instance != null) { return _instance; } else { return ...
- 为什么选择.NETCore
为什么选择.NETCore? 学习新的开发框架是一项巨大的投资.您需要学习如何在新框架中编写,构建,测试,部署和维护应用程序.作为开发人员,有许多框架可供选择,很难知道什么是最适合的.即使您正在使用 ...
- redis如何实现主从数据的同步
Redis的主从同步机制可以确保redis的master和slave之间的数据同步.按照同步内容的多少可以分为全同步和部分同步:按照同步的时机可以分为slave刚启动时的初始化同步和正常运行过程中的数 ...
- spring_boot实战日记(二)logback的使用和配置
日志:描述系统运行状态的所有信息都是日志. 日志能力: 1.定制输出目标. 2.定制输出格式. 3.携带上下文信息 4.运行时选择输出. 5.灵活的配置 日志选择: 日志门面:JCL(和Logback ...