翼度科技»论坛 编程开发 JavaScript 查看内容

vue3页面query参数变化并重新加载页面数据方式

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
一、业务场景

列表页携带id跳转到详情页,id发生变化重新加载当前页面。
跳转分两种情况,假设A页面是id为1111的详情页,B页面是id为2222的详情页。

  • 第一种,A页面跳转到B页面,B页面返回时直接返回列表页。
  • 第二种,A页面跳转到B页面,B页面返回时返回A页面,A页面再返回返回到列表页。

二、实现方式

核心方法: $router.push $router.replace
A页面跳转到B页面的方法:

  • 第一种情况:
  1.     import { useRouter } from 'vue-router'

  2.     const router = useRouter()

  3.     router.replace({
  4.       path: '/eFileManagement/company/collection/detail',
  5.       query: { id: '2222' }
  6.     })
复制代码

  • 第二种情况:
  1.     import { useRouter } from 'vue-router'

  2.     const router = useRouter()

  3.     router.push({
  4.       path: '/eFileManagement/company/collection/detail',
  5.       query: { id: '2222' }
  6.     })
复制代码
三、发现问题

到第二步,我们需要的功能就已经实现了,但是会发现地址栏id是变化了,页面数据却并没有刷新,这时我们给App.vue里的router-view标签添加一个key值即可
如下:
  1. <router-view :key="routerKey"></router-view>
复制代码
  1. import { useRoute } from 'vue-router'

  2. const route = useRoute()

  3. const routerKey = computed(() => {
  4.   return route.path + Math.random()
  5. })
复制代码
OK!

延伸:(keep-alive)

如果router-view在keep-alive标签下,那么需要再给router-view加个状态值,用来控制router-view显示隐藏,并且provide注入,方便页面中调用。
App.vue:
  1. <router-view :key="routerKey" v-if="isAlive"></router-view>
复制代码
  1. import { ref, provide, nextTick } from 'vue'

  2. const isAlive = ref<boolean>(true)

  3. function reload() {
  4.     isAlive.value = false
  5.     nextTick(() => {
  6.         isAlive.value = true
  7.     })
  8. }

  9. provide('reload', reload)
复制代码
A页面里:
  1. import { inject } from 'vue'
  2. const reload:any = inject('reload')
复制代码
然后在push或者replace方法后调用reload方法。
  1.     import { useRouter } from 'vue-router'

  2.     const router = useRouter()

  3.     router.push({
  4.       path: '/eFileManagement/company/collection/detail',
  5.       query: { id: '2222' }
  6.     })    reload()
复制代码
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/javascript/328977mrz.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具