刷新页面,记住页面内的列表查询参数——vue3实现

需求

页面中包含数据列表查询功能时,刷新页面时保持查询参数是比较常见的需求

方案

可将查询参数置于组件的路由参数中,也可以通过本地存储实现

Demo

以下,基于 vue3 & element-plus ,使用路由参数保存列表查询参数,实现刷新页面,查询条件不变

创建组件后,根据路由参数初始化查询参数
查询参数改变时,更新路由参数

<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { getDataList } from '@/api/demo'

const $route = useRoute(), $router = useRouter()

const { query } = $route
const filterItems = reactive({ // 查询参数
  sort: query.sort??'desc', // 默认值 desc
  type: query.type,
  search: query.search
})

onMounted(() => {
  getDatas()
})
// 查询数据列表
function getDatas() {
  getDataList(getQueryParams()).then(res => {
    datas = res.data
  })
}
// 获取查询参数
function getQueryParams() {
  let params = {}
  for(let k in filterItems) {
    if(filterItems[k]) params[k] = filterItems[k]
  }
  return params
}
// 表单查询
function queryHandler() {
  replaceRouter()
  getPagedData()
}
// 更新路由参数
function replaceRouter() {
  $router.replace({ query: getQueryParams() })
}
</script>

<template>
  <!-- 查询表单 -->
  <el-form :inline="true" :model="filterItems">
    <el-form-item label="Sort By: ">
      <el-select v-model="filterItems.sort" @change="queryHandler()"></el-select>
    </el-form-item>
    <el-form-item label="Type: ">
      <el-select v-model="filterItems.type" @change="queryHandler()"></el-select>
    </el-form-item>
    <el-form-item label="Search: ">
      <el-input v-model="filterItems.search" @keyup.enter="queryHandler()"/>
    </el-form-item>
    <el-form-item>
      <el-button @click="queryHandler()">查询</el-button>
    </el-form-item>
  </el-form>
  <!-- 数据列表 -->
  <el-table :data="datas"></el-table>
</template>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值