Vue路由传参的几种方式

2018年07月28日 23:52:40 广积粮缓称王 阅读数 12613
 

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

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

params传参(url中显示参数)

  • 文件结构

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

效果:

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

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

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

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

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

使用Query实现路由传参

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

效果如下:

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

常用的mode模式有两种:

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

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

默认不使用mode:history 如下

Vue路由传参的几种方式的更多相关文章

  1. vue路由传参的三种方式以及解决vue路由传参页面刷新参数丢失问题

    最近项目中涉及到跨页面传参数和后台进行数据交互,看到需求之后第一反应就是用路由传参来解决:Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下: 方法一:params传参: this.$r ...

  2. vue路由传参的三种方式区别(params,query)

    最近在做一个项目涉及到列表到详情页的参数的传递,网上搜索一下路由传参,结合自己的写法找到一种适合自己的,不过也对三种写法都有了了解,在此记录一下 <ul class="table_in ...

  3. vue路由传参的三种方式

    方式一 通过query方式传参 这种情况下 query传递的参数会显示在url后面 this.$router.push({ path: '/detail', query: { id: id } }) ...

  4. vue --- 路由传参的几种方式

    方案一: getDescribe(id) { // 直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/describe/${id}`, }) ...

  5. vue路由传参的几种基本方式

    原文地址 this.$router.push跳转 现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据.父组件中: <li v-for="article i ...

  6. vue-router 路由传参的几种方式,刷新页面参数丢失

    常见场景:点击列表详情,跳转到详情内页,传递id参数获取详情数据. 我们先来看看路由跳转的几种方式: 1.通过params方式传参 通过$route.push的path携带参数方式 // 路由配置 { ...

  7. Vue-router路由传参的三种方式

    本文简单介绍下三种路由传参: (1)在路由中配置 { path : ‘/home/:id’, name : ‘Dome’, component } 然后写调用的时候 this.$router.push ...

  8. vue里面路由传参的三种方式

    1.方式一 通过query的方式也就是?的方式路径会显示传递的参数 HTML的方式<router-link :to="{name:xxx,query:{page:1,code:8899 ...

  9. vue 路由传参的三种基本模式

    路由是连接各个页面的桥梁,而参数在其中扮演者异常重要的角色,在一定意义上,决定着两座桥梁是否能够连接成功. 在vue路由中,支持3中传参方式. 场景,点击父组件的li元素跳转到子组件中,并携带参数,便 ...

随机推荐

  1. linux学习(2):linux服务器常用操作和命令

    linux服务器常用操作和命令 目录 1. 什么是linux服务器load average?2. 如何查看linux服务器负载3. 服务器负载高怎么办?4. 如何查看服务器内存使用率?5. 如何查看单 ...

  2. EFProf用法

    SQL Server Profiler用来跟踪应用程序发送到SQL Server中的SQL语句,用于检测性能,查找问题.Entity Framework 也有它的跟踪工具EFProf,用于跟踪Enti ...

  3. CentOS7.4安装ipython

    摘自:https://www.jianshu.com/p/aa93a0341c82 使用pip3安装ipython及其依赖包:pip3 install ipython在 .bashrc文件中添加环境变 ...

  4. php中类的不定参数使用示例

    在类的实例化过程中,可以带或不带参数,那么构造函数将如何处理这些参数呢?为了使构造函数具有通用性,在定义构造函数时,一般不带参数,然后在其内部对参数情况进行处理.下面代码显示了一个完整的通用Perso ...

  5. Oracle-关于Oracle.ManagedDataAccess

    今天调用webservice的时候,运行程序后开始报错以下的错误信息 “/”应用程序中的服务器错误. 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的 ...

  6. SRC漏洞挖掘

    SRC目标搜集 文章类的平台 https://www.anquanke.com/src 百度搜索 首先得知道SRC厂商的关键字,利用脚本搜集一波. 比如[应急响应中心]就可以作为一个关键字.通过搜索引 ...

  7. 寄存器vs缓存vs硬盘

    对于多核cpu来说(一个处理器cpu上有多个核),L1/L2是各个核独自的,L3是多个核共享的 如下配置:一个处理器cpu,六个核.处理器速度为2.2GHz即电流每秒钟可以振荡22亿次.二级缓存256 ...

  8. QT源码分析:QTcpServer

    最近在看有关IO复用方面的内容,自己也用标准c++库实现了select模型.iocp模型.poll模型.回过头来很想了解QT的socket是基于什么模型来实现的,所以看了QT关于TcpServer实现 ...

  9. win7蓝屏死机0x0000003B错误蓝屏故障解决

    win7蓝屏死机0x0000003B错误蓝屏故障解决 刚才一个朋友问我:电脑蓝屏了怎么办. 我问他要了电脑的截图,自己看了错误代码:0x0000003B 搜索资料,查询了一番.都是说电脑中病毒或者是系 ...

  10. Ubuntu查看与结束任务进程

    1.打开终端 2.敲  ps -ef  查出进程的编号(就是PID那列) 3.输入 kill PID 即可(如果PID是123456,则kill 123456) 例如: 我想把splash关闭,直接输 ...