VUE A页面跳转到B页面带参数,且每次点击跳转,数据刷新

文章详细介绍了在Vue中如何进行带参数的页面跳转,包括使用<router-link>标签和js操作,以及query和params的区别。同时,针对B页面在不同参数跳转下保持数据刷新的需求,提出了去除缓存、watch监听router以及处理相同页面跳转的解决方案。
摘要由CSDN通过智能技术生成

背景:项目遇到一个业务需求是,A页面展示消息列表,然后点击列表中的消息,跳转到B页面,B页面需要展示A页面中对应消息的内容。

一、描述

如下图所示:A页面跳转到B页面,B页面带条件,且不同消息跳转到B页面,B页面未关闭的情况下,B页面得刷新。

在这里插入图片描述在这里插入图片描述

二、VUE带参数页面跳转

跳转方式:

1)标签

示例:

// params方式
<router-link style="color: red" :to="{name: 'Approve',params: { id: '1'}}">
{{ content }}
</router-link>
// query方式
<router-link style="color: red" :to="{name: 'Approve',query: { id: '1',}}">
{{ content }}
</router-link>

queryparams 区别

  • query 类似 get,跳转之后页面 url 后面会拼接参数.
接参方式:this.$route.query.index
  • params 类似 post,跳转之后页面 url 后面不会拼接参数,刷新页面传的参数消失。
接参方式:this.$route.params.index

2)js操作跳转

一般用事件,点击之后执行代码实现跳转。
示例:

// params传参
this.$router.push({name:'Approve',params: {id:'1'}})
// 只能用 name
// 路由配置path: "/Approve/:id" 或者 path: "/Approve:id",
// 不配置path, 第一次可请求, 刷新页面id会消失
// 配置path, 刷新页面id会保留,这里配置就相当于get传参
// B页面取参, this.$route.params.id

// query传参
this.$router.push({name:'Approve', query: {id:'1'}})
this.$router.push({path:'/Approve',query: {id:'1'}})
// B页面取参: this.$route.query.id

三、B页面实现每次点击参数变化,数据刷新

背景:由于页面使用了缓存,如果A、B页面已经打开,切换A、B页面,并不会调用接口刷新数据和页面。这就导致了当从A页面点击消息跳转打开B页面后,再次点击A页面别的消息,B页面还是上一次消息的搜索数据结果。

解决方案:

1)去除缓存。

每次不管是从A页面点击点消息跳转到B页面,还是直接切换到B页面,都会刷新B页面,从而实现每次点击A页面消息跳转到B页面,数据都是刷新的。

2)watch监听router

当若需求要求切换到B页面时,B页面不刷新;只从A页面点击消息跳转到B页面时,刷新数据。

 watch: {
    // 监听路由,第二次及以上从消息页面跳转过来,需要调用接口,防止页面不刷新
    $route() {
     	// 触发条件
      if (
        this.$route.name === "Approve" &&
        this.$route.params.id=== 2
      ) {
        // 你需要的操作,重新调用接口啥的
        ...
      }
    },
  },

3)当点击跳转的是同一个页面时

如下,点击消息,实际并没有页面跳转情况。
在这里插入图片描述

// 由于当连续点击路由跳转到同一个页面时,在router.js里边做了处理,防止防止连续点击多次路由报错,所以这里点击页面不更新
// 这里在跳转传参是加了个参数,确保每个点击参数不一样就行,我这里是从后端获取的参数主键id
query: {
   id: id,
},
// 上述方法有一个问题,当打开某个页面id=1,然后刷新浏览器,会重置所有搜索条件,但是链接上的id=1依然存在,这时再通过同样方法点击id=1的数据,发现页面不刷新,所以这里建议,如果id只是起到刷新作用,建议再加一个时间戳
query: {
    id:id,
	t: new Date().getTime(),
},
当使用Vue进行单页面应用开发时,如果在浏览器中直接刷新跳转到某个路由地址,可能会导致404错误的问题。这是因为单页面应用的特性决定了它的路由是由前端控制的,而服务器端并没有相应的路由配置。所以当用户直接访问一个路由地址时,服务器无法正确处理这个请求,就会返回404错误。 解决这个问题的方法有两种: 1. 使用服务器端的重定向配置:在服务器端的配置中,可以把所有的路由都重定向到主页面,这样当用户直接访问某个路由地址时,服务器会将请求重定向到主页面,然后由前端Vue路由来处理。这样就能避免404错误的出现。 2. 使用History模式:Vue提供了一种History模式的路由配置方式,通过这种方式可以使URL看起来更加正常,不再有"#/"这样的标识符。但是使用History模式时,需要在服务器端进行相应的配置,以确保用户直接访问某个路由地址时能够正确返回对应的页面,而不是返回404错误。具体的配置方式可以参考Vue的官方文档或相关的教程。 综上所述,要解决Vue刷新页面跳转到404的问题,可以通过服务器端的重定向配置或使用Vue的History模式,并在服务器端进行相应的配置,以确保用户访问路由地址时能够正确返回对应的页面,而不是返回404错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [关于Vue3刷新页面报错404的解决方法](https://blog.csdn.net/Yang_Ming_Lei/article/details/130384715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue页面实现当前页面刷新跳转时提示保存](https://download.csdn.net/download/weixin_38749863/12950235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值