Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • JavaScript

  • TypeScript

  • Vue

    • Vue 编码指南
    • vue-cli 启动本地服务局域网不能访问的原因分析
    • 解决 Vue 相同路由参数不同不会刷新的问题
    • 解决 vuex requires a Promise polyfill in this browser 问题
    • 关于父组件通过 v-on 接收子组件多个参数的一点研究
    • Vue $attrs 和 $listeners
    • Vue axios 发送 Form Data 数据格式请求
    • Vue 开发技巧
    • Vue 动态路由
    • Vue 集成 UEditor 富文本编辑器
    • Vue 修饰符
    • Vue 问题集合
    • Vue props 传多值的问题
    • vue-router 在 IE11 下手动更改 URL 的 hash 不会触发路由
    • vue-router 路由参数刷新消失的问题
      • 问题
      • 解决
    • 那些年被我们忽略的 vue 语法
    • vue 生命周期深入
    • vue 组件通信深入
    • vue 组件通信深入 Vuex
    • vue项目移动端、pc端适配方案
    • vuepress 如何引入 vuex
  • ElementUI

  • React

  • AntD

  • 前端
  • Vue
Henry
2017-08-17
目录

vue-router 路由参数刷新消失的问题

页面使用 vue-router 在跳转时需要给下一个页面携带参数. 在进入页面后再次刷新, 参数就消失了.

# 问题

页面使用 vue-router 在跳转时需要给下一个页面携带参数. 在进入页面后再次刷新, 参数就消失了.

这是上个页面跳转写的.

this.$router.push({
  name: 'articleDetail',
  params: {
    articleId: this.articleId
  }
})
1
2
3
4
5
6

这边是从上个页面接收这个参数请求数据

methods: {
  init () {
    console.log(this.$route.params.articleId)
    this.params = this.$route.params
    this.articleId = this.params.articleId
    this.getArticleDetail(this.articleId)
  }
}
1
2
3
4
5
6
7
8

进入页面后再次刷新的话请求的数据就没有了.

# 解决

你在用 vue-router 跳转的时候可以把参数写进 query 里

this.$router.push({
  name: 'articleDetail',
  query: {
    articleId: this.articleId
  }
});
1
2
3
4
5
6

这样你的 url 就会像 http://xxx.xxx.xxx/articleDetail?articleId=123 , 这样无论你怎么刷新 articleId 都不会丢失

然后在你的 init 方法里 可以用 this.articleId = this.$route.query.articleId 来获取 id

如果要用 params 传参的话, 可能需要在你的路由路径里也加上这个参数, 比如上面的例子, 那么在路由里就要这样写

routes: [{
  path: '/articleDetail/:articleId',
  name: 'articleDetail'
}]
1
2
3
4

path: '/articleDetail/:articleId' 里的 :articleId 是必须要有的

如果要传递对象, 需要使用 JSON 转一下

this.$router.push({
  path: '/manage/composition',
  query: {
    dropDefaultActive: this.dropDefaultActive,
    option: JSON.stringify(this.option)
  }
})
1
2
3
4
5
6
7

相应的, 接收页面还需要转回来

getUrlParam() {
  let param = this.$route.query;
  this.dropDefaultActive = param.dropDefaultActive;
  this.option = JSON.parse(param.option)
}
1
2
3
4
5
编辑 (opens new window)
#Vue
上次更新: 5/27/2023, 1:02:05 PM
vue-router 在 IE11 下手动更改 URL 的 hash 不会触发路由
那些年被我们忽略的 vue 语法

← vue-router 在 IE11 下手动更改 URL 的 hash 不会触发路由 那些年被我们忽略的 vue 语法→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式