vue项目实现路由跳转到新页面,返回旧页面,保留之前的数据记录

文章描述了如何在项目页面中利用SessionStorage存储和管理相关参数,如树节点、筛选条件和页码,以及在路由跳转和返回时的操作策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以项目里某个页面为示例。

// 页面相关参数示例
searchParams: {
    projectName: '',// 筛选搜索框参数
    handlerOrgId: '',// 左侧树点击参数
    pageNum:JSON.parse(sessionStorage.getItem('nowPageData'))?.pageNum || 1,// 页码参数
},

在相关操作路由跳转时,对当前页面的参数进行一个存放处理,此示例将数据放在 Session Storage 里面。 

// 操作示例:数据包含点击的树节点,筛选框的参数,以及选中的列表页码
jumpToFormFn(type, id) {
    let _data = Object.assign(this.searchParams, {});/
    sessionStorage.setItem('nowPageData', JSON.stringify(_data));/这两行代码用来往            sessionStorage存数据
    this.$router.push({
        path: 'fieldFundsForm',
        query: {
           type,
            id,
        },
    });
},

返回旧页面时,判断Session Storage 里面是否含有当前页面的参数缓存

如果有数据缓存,在页面创建时将参数赋值给页面的参数,

let _obj = JSON.parse(sessionStorage.getItem('nowPageData'));
    Object.keys(this.searchParams).forEach((key) => {
    this.searchParams[key] = _obj[key] || this.searchParams[key];
    this.currentCHeckedId = this.searchParams.handlerOrgId; // 本次示例左侧树需要高亮选中,其他操作也是如此,
    // 存放数据,在掉对应树接口之后,设置高亮选中或者勾选即可
});
## 数据存放之后,清除缓存
sessionStorage.removeItem('nowPageData');

如果列表组件有相应封装的需要对应修改一下,组件里当前页数  currentPage:

// 如果this.searchParams.pageNum有值,就取这个值,要么就取默认值 

<think>好的,我现在需要解决用户在Vue3中实现二级路由跳转新页面并传递参数的问题。首先,我应该回顾一下Vue Router的基础知识,尤其是Vue3中的路由配置和传参方式。 用户提到了二级路由,这意味着在路由配置中需要嵌套子路由。我记得在Vue Router中,二级路由是通过在父路由的children属性中定义子路由实现的。例如,父路由的path可能为'/parent',而子路由的path可以是'child',这样组合后的路径就是'/parent/child'。 接下来是传参的问题。Vue Router有两种主要的传参方式:params和query。根据引用[2],params类似于POST请求,参数不会显示在URL中,但需要路由配置中定义动态段,比如path: '/parent/:id'。而query参数类似于GET请求,会显示在URL的查询字符串中,不需要提前在路由配置中定义。 用户需要跳转新页面,这可能意味着需要在新页面中接收参数。如果是通过params传参,子路由的路径必须包含动态字段,否则刷新后参数会丢失。例如,如果子路由的path是'child',而传参使用params,那么刷新页面时参数可能无法保留,除非路径中包含动态段,比如'child/:id'。因此,正确的路由配置对于保持参数至关重要。 然后,关于跳转方式,用户可能使用的是声明式导航(<router-link>)或编程式导航(router.push)。根据引用[2],这两种方式都支持传递params或query参数。例如,使用编程式导航时,可以调用router.push({ name: 'childRoute', params: { id: 1 } })或者使用query对象传递参数。 在Vue3中,组合式API的使用可能会影响参数的获取方式。例如,在setup函数中,可以使用useRoute钩子来访问当前路由对象,进而获取params或query中的参数。比如,const route = useRoute(); const id = route.params.id; 或者通过route.query.id获取查询参数。 另外,用户提到的是二级路由跳转新页面,可能需要确保在父路由组件中包含<router-view>来显示子路由的内容。根据引用[3],在父组件中放置<router-view>是子路由渲染的必要条件。例如,在父路由对应的组件中,需要有<router-view></router-view>来展示子路由的组件。 现在,我需要将这些步骤整合成一个清晰的解决方案。首先配置二级路由,确保子路由的path正确,并处理动态参数。然后,在跳转时使用正确的传参方式(params或query),并在目标组件中通过useRoute获取参数。同时,需要注意路由配置中的name属性是否正确引用,以避免跳转错误。 可能还需要考虑参数的响应性。例如,当参数变化时,组件是否需要重新获取数据?这时候可以使用watch来监听路由参数的变化,并执行相应的操作,比如重新请求数据。 最后,需要测试不同的传参方式,确保在刷新页面时参数不会丢失,尤其是使用params传参时,路由配置必须包含动态段。同时,检查query参数是否在URL中正确显示,并能够被目标组件正确获取。 总结步骤:配置二级路由结构,定义传参方式(params或query),在跳转时传递参数,目标组件中获取参数,处理参数变化和页面刷新后的参数保留问题。</think>在Vue3中实现二级路由跳转新页面并传递参数,可通过以下步骤完成: --- ### 一、配置二级路由路由配置文件中定义父路由和子路由结构: ```javascript // router/index.js import { createRouter, createWebHistory } from 'vue-router' const routes = [ { path: '/parent', name: 'Parent', component: () => import('@/views/Parent.vue'), children: [ // 定义二级路由 { path: 'child/:id', // 支持动态参数 name: 'Child', component: () => import('@/views/Child.vue') } ] } ] const router = createRouter({ history: createWebHistory(), routes }) export default router ``` --- ### 二、实现路由跳转与传参 #### 1. 声明式导航(`<router-link>`) ```html <!-- 使用params传参 --> <router-link :to="{ name: 'Child', params: { id: 123 } }">跳转到子路由</router-link> <!-- 使用query传参 --> <router-link :to="{ name: 'Child', query: { keyword: 'vue3' } }">跳转带查询参数</router-link> ``` #### 2. 编程式导航(`router.push`) ```javascript // 在组件脚本中 import { useRouter } from 'vue-router' const router = useRouter() // params传参 router.push({ name: 'Child', params: { id: 123 } }) // query传参 router.push({ name: 'Child', query: { keyword: 'vue3' } }) ``` --- ### 三、接收参数 在子路由组件中使用`useRoute`获取参数: ```javascript // Child.vue import { useRoute } from 'vue-router' const route = useRoute() // 获取params参数 const id = route.params.id // 输出: 123 // 获取query参数 const keyword = route.query.keyword // 输出: 'vue3' ``` --- ### 四、关键注意事项 1. **路由配置**:若使用`params`传参,需在路由路径中定义动态字段(如`path: 'child/:id'`),否则刷新页面参数会丢失[^2]。 2. **参数类型**: - `params`适合传递敏感数据或短参数,URL中不显示[^2] - `query`适合非敏感数据,参数会暴露在URL中(如`/child/123?keyword=vue3`)[^2] 3. **父组件占位**:父路由组件需包含`<router-view>`标签用于渲染子路由组件[^3]。 --- ### 五、完整示例 #### 父路由组件(Parent.vue): ```html <template> <div> <h1>父级页面</h1> <router-view></router-view> <!-- 子路由渲染位置 --> </div> </template> ``` #### 子路由组件(Child.vue): ```html <template> <div> <h2>接收的参数:</h2> <p>ID: {{ id }}</p> <p>关键词: {{ keyword }}</p> </div> </template> <script setup> import { useRoute } from 'vue-router' const route = useRoute() const id = route.params.id const keyword = route.query.keyword </script> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值