首页 > 其他分享 >Vue路由传参的几种方式

Vue路由传参的几种方式

时间:2023-06-03 10:26:04浏览次数:43  
标签:传参 Vue name params 组件 path 路由

vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效

一、利用"router-link"路由导航

父组件:

使用 <router-link to = "/跳转路径/传入的参数"></router-link>

例如:<router-link to="/a/123">routerlink传参</router-link>

子组件:

使用 this.$route.params.num 接收父组件传递过来的参数

mounted () {
  this.num = this.$route.params.num
}

路由配置:{ path: '/a/:num', name: A, component: A }

地址栏中的显示:http://localhost:8080/#/a/123

 

二、调用$router.push实现路由传参

父组件: 绑定事件,编写跳转代码

<button @click="deliverParams(123)">push传参</button>
  methods: {
    deliverParams (id) {
      this.$router.push({
        path: `/d/${id}`
      }) 
     }
  }

子组件:this.$route.params.id接收父组件传递过来的参数

mounted () {
  this.id = this.$route.params.id
}

路由配置{path: '/d/:id', name: D, component: D}

地址栏中的显示http://localhost:8080/#/d/123

 

三、通过路由属性中的name匹配路由,再根据params传递参数

父组件: 匹配路由配置好的属性名

<button @click="deliverByName()">params传参</button> 
    
deliverByName () { this.$router.push({ name: 'B', params: { sometext: '熊出没' } }) }

子组件:

<template>
  <div id="b">
    This is page B! 
    <p>传入参数:{{this.$route.params.sometext}}</p> 
  </div> 
</template>

路由配置:{path: '/b', name: 'B', component: B}   路径后面不需要再加传入的参数,但是name必须和父组件中的name一致

地址栏中的显示: http://localhost:8080/#/b   可以看出地址栏不会带有传入的参数,且再次刷新页面后参数会丢失

 

四、通过query来传递参数

父组件

<button @click="deliverQuery()">query传参</button>
    deliverQuery () { 
      this.$router.push({
        path: '/c', 
        query: {
          sometext: '我是光头强' 
        } 
      }) 
    }

子组件

 <template>
  <div id="C">
    This is page C! 
    <p>这是父组件传入的数据: {{this.$route.query.sometext}}</p> 
  </div> 
</template>

 

路由配置:{path: '/c', name: 'C', component: C}

无需做任何修改

地址栏中的显示:http://localhost:8080/#/c?sometext=%E8%BF%99%E6%98%AF%E5%B0%8F%E7%BE%8A%E5%90%8C%E5%AD%A6

相当于再url地址后面拼接参数(中文转码

 

标签:传参,Vue,name,params,组件,path,路由
From: https://www.cnblogs.com/le-fang/p/17453387.html

相关文章

  • vue+elementUI 合并行3
    1、返回数据为一维数组getData(){that.tableData=res.data.data.list;}2、合并函数挂在vue底层:Vue.prototype.$spanMethodFunc=function(list,props,row,col)写在method内:spanMethodFunc(list,props,row,col){if(col>=props.length||!props[co......
  • Vue进阶(幺零八):npm run build 错误 (node:7852) UnhandledPromiseRejectionWarning: Cs
    (文章目录)一、前言在项目打包过程中,突然报如下错误:Vuenpmrunbuild错误(node:7852)UnhandledPromiseRejectionWarning:CssSyntaxError:xxxx.但是在执行npmrundev过程中,并未错误或告警信息。二、解决方案打开webpack.prod.conf.js,注释掉以下配置代码newOptimiz......
  • vue+elemntUI合并行2
    返回的是一维数组o:[{id:1,name:s;age:11},{id:1,name:s;age:11},{id:2,name:p;age:15}]1、对返回的数据做处理getData(){that.tableData=res.data.data.list;that.getFormatList();//重新合并行},getFormatList(){letrecordObj={};this.re......
  • Vue路由,子路由,动态路由,动态路由参数,路由查询参数
    一、路由、子路由、动态路由子路由、动态路由类似,不同的是子路由同时有路由跳转和页面跳转的,动态路由只有路由跳转,没有页面跳转举例如下:/customerHome 下有 item1 和 item2 两个子路由。import{createRouter,createMemoryHistory,RouteRecordRaw}from'vue-router'......
  • vue 浏览器调试 定位具体行数
    module.exports={lintOnSave:false,devServer:{//开发环境下设置为编译好以后直接打开浏览器浏览open:true,},configureWebpack:(config)=>{//调试JSconfig.devtool="eval-source-map"},css:{//查看CSS属于哪个css文件......
  • vue+elementui 合并行
    1,数据格式是二维的如:o:{id:123,prams:{name:aaa,age:11}}的对象第一步:先获取返回的数据为indexInfoList,遍历转化为一维数组 that.indexInfoList.forEach(ele => {if(ele.prams.length>=1){ele.prams.map((related,index)=>{......
  • Vue——自动切换图片
    利用属性指令+setInterval(是一个实现定时调用的函数)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="js/vue.js"></script></head>......
  • Vue——属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、过滤
    vm对象<body><divid="app"><h1>{{name}}</h1><button@click="handleClick">点我</button></div></body><script>//1写在data或method中的属性或方法,从vm中直接可以点出来//2method的函数中,如......
  • vuepress快速安装笔记
    参考https://vuepress.vuejs.org/guide/getting-started.html#prerequisiteshttps://blog.llyth.cn/1065.html注意:应该是cd到新建项目文件夹的docs里,然后yarninstall。在项目文件夹里,执行yarndev启动运行项目,yarnbuild生产静态文件,结果与文件路径如下。waitRenderings......
  • vue解决跨域方法
    什么是跨域  跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。这里列举一个经典的列子:#协议跨域http://a.baidu.com访问https://a.baidu.com;#端口跨域http://a.baidu.com:8080访问http://a.baidu.com:80;#域......