Aiden's blog Aiden's blog
首页
  • 前端文章

    • JavaScript
    • Vue
  • 学习笔记

    • JavaScript教程
    • JavaScript高级程序设计
    • ES6 教程
    • Vue
    • Vue3.0
    • React
    • TypeScript 从零实现 axios
    • Git
    • TypeScript
    • JS设计模式总结
    • 小程序
    • 小程序云开发
    • Echarts
    • 微前端
    • H5
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 搜索引擎
  • ES系列
  • 经典面试题
  • 知识点总结
  • uni-app
  • 算法
  • Vue3实战
  • 小程序chatgpt
  • 小程序配网流程
  • 程序WIFI配网
  • 小程序WebSocket
  • H5 WebSocket
  • H5 TTS
  • Vue3实现OSS存储
  • 大文件分片上传
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Aiden Wu

前端界的小学生
首页
  • 前端文章

    • JavaScript
    • Vue
  • 学习笔记

    • JavaScript教程
    • JavaScript高级程序设计
    • ES6 教程
    • Vue
    • Vue3.0
    • React
    • TypeScript 从零实现 axios
    • Git
    • TypeScript
    • JS设计模式总结
    • 小程序
    • 小程序云开发
    • Echarts
    • 微前端
    • H5
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 搜索引擎
  • ES系列
  • 经典面试题
  • 知识点总结
  • uni-app
  • 算法
  • Vue3实战
  • 小程序chatgpt
  • 小程序配网流程
  • 程序WIFI配网
  • 小程序WebSocket
  • H5 WebSocket
  • H5 TTS
  • Vue3实现OSS存储
  • 大文件分片上传
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript文章

  • Vue文章

    • Vue CLi3 修改webpack配置
    • Vue中的scoped和scoped穿透
    • Vue项目使用mock数据的几种方式
    • Vue路由传参问题
      • 路由传参问题
        • query 方式
        • params 方式
        • 新开页面
        • 原因
        • 解决方案
  • 学习笔记

  • 前端
  • Vue文章
wushengxin
2021-09-30
目录

Vue路由传参问题

# 路由传参问题

# query 方式

参数会在url中显示

this.$router.push({
// query方式

path: "/a",

query: {
projectDetails: val

},params 方式
1
2
3
4
5
6
7
8
9

# params 方式

传参数据不会在导航栏中显示,需要配合路由的name属性使用

// params 方式

name: 'a',

params: {
projectDetails: val

}
1
2
3
4
5
6
7
8

# 新开页面

需要使用resolve配置

const {href} = this.$router.resolve({
path: '/a',

query: {
code: '123',

}

})

window.open(href, '_blank')
1
2
3
4
5
6
7
8
9
10
11

这里需要注意一下,使用params进行传参,在新页面内使用this.$route.params对象为{},参数无法传过来,query是可以正常传参。

我想这个应该跟我们正常打开一个链接是一样的,因为router-link的tag='a',应该是个超链接。

# 原因

  • params 是保存在内存中的,window.open(detail.href, '_blank') 会打开一个新的窗口,这时候已经跟之前的 vue-router 实例没关系了

  • open新页面,window对象是独立。拿不到数据,你可以使用query的形式,或者params放入url里面的形式

var router = new VueRouter({
    mode: 'history',
    routes: [
        {path: '/article/detail/:article_id', name: '/detail'}
    ]
})

this.$router.resolve({path: `/article/detail/${article_id}`});
1
2
3
4
5
6
7
8

这样导致params传参的参数会显示在url地址,如何解决呢?

# 解决方案

可以通过转义为base64格式的字符串形式进行传递

传递

const info = { fileid: item.id, readOnly: item.readOnly };
const { href } = this.$router.resolve({
    name: "workspace",
    params: {
        info: window.btoa(JSON.stringify(info)),
    },
});
window.open(href, "_blank");
1
2
3
4
5
6
7
8

调用

JSON.parse(window.atob(this.$route.params.info));
1

这个只是我的个人想法,欢迎指正。

如果遇到这种情况,不想参数在url上显示且必须要传的话,也可以借用浏览器的缓存来实现。

在父页面写入缓存,在子页面从缓存中读取,读取之后再删除。

当然如果还有更好的解决方案,欢迎留言。

最后

我是觉得,如果遇到困难,暂时无法解决,可以选择曲线救国,疑难杂症后续有时间在深入研究。

编辑 (opens new window)
上次更新: 2021/12/06, 21:28:32
Vue项目使用mock数据的几种方式
JavaScript教程

← Vue项目使用mock数据的几种方式 JavaScript教程→

最近更新
01
大文件分片上传
08-05
02
Vue3实现OSS存储
08-05
03
H5 TTS
08-05
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Aiden Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×