VUE项目后台管理系统(六)分页展示,模糊查询列表,清空输入框后,查询全部数据

分页展示

官网的拿过来就可以
在这里插入图片描述

	<!-- 分页功能 -->
			<el-pagination align="left" @size-change="SizeChange"
       @current-change="CurrentChange" :current-page="queryInfo.pagenum"
			 :page-sizes="[1,2,5,10]" :page-size="queryInfo.pagesize" 
       layout="total, sizes, prev, pager, next, jumper" :total="total">

			</el-pagination>

@size-change属性的意思是 绑定当前页数量的事件,当当前页数量变化时,触发SizeChange方法

@current-change 这个也是事件
:current-page 这个属性是绑定当前第几页
:page-size 这个属性绑定当前有几条数据

总之 分页代码就几行,但是事件比较多,事件方法里面的动作就是改变往后端传的分页大小的参数,并且刷新当前页面。
:total=“total” 这个是绑定一个变量保存数量总数

在这里插入图片描述

在这里插入图片描述

模糊查询列表

分页展示的时候,我们需要往后传page rows ,那么我们将我们要搜索的东西也放到往后传的实体里面,那么就可以在后端进行搜索就可以了。

具体做法是,将我们输入的东西放到变量里面,后端获取变量,

在这里插入图片描述
绑定以上的变量

在这里插入图片描述
在这里插入图片描述
以上是往后端传

在这里插入图片描述
后端只需要加一个判断就可以了,

清空输入框后,查询全部数据

只需要在清空输入框后调用一个事件就可以了,就是之前查询列表的方法就可以了

在这里插入图片描述

### Vue 前台输入框调用后台接口进行搜索查询 示例 在 Vue 中实现通过输入框调用后台接口进行搜索查询,可以通过监听输入框的变化,结合 `axios` 或其他 HTTP 请求库来完成与后端的交互。以下是完整的实现示例和说明。 #### 输入框绑定与事件监听 使用 `v-model` 绑定输入框的值,并通过 `@input` 事件监听输入框的变化[^3]。 ```html <template> <div> <el-input placeholder="请输入关键字" v-model="searchQuery" @input="handleSearch" > <template #append> <el-button icon="el-icon-search" @click="handleSearch"></el-button> </template> </el-input> <ul> <li v-for="(item, index) in resultList" :key="index"> {{ item.name }} </li> </ul> </div> </template> ``` #### 定义数据与逻辑 使用 Vue 的 `data` 定义搜索查询、结果列表等状态,并通过 `methods` 定义请求后端接口的逻辑[^2]。 ```javascript <script> import axios from 'axios'; export default { data() { return { searchQuery: '', // 搜索框绑定的数据 resultList: [] // 后端返回的搜索结果 }; }, methods: { async handleSearch() { if (this.searchQuery.trim()) { try { const response = await axios.get('/api/search', { params: { query: this.searchQuery } }); this.resultList = response.data; // 更新搜索结果 } catch (error) { console.error('搜索失败:', error); } } else { this.resultList = []; // 清空结果列表 } } } }; </script> ``` #### 添加防抖功能 为了减少不必要的请求,可以为输入框添加防抖功能[^3]。 ```javascript <script> import axios from 'axios'; import { debounce } from 'lodash'; export default { data() { return { searchQuery: '', resultList: [] }; }, methods: { async fetchData(query) { if (query.trim()) { try { const response = await axios.get('/api/search', { params: { query } }); this.resultList = response.data; } catch (error) { console.error('搜索失败:', error); } } else { this.resultList = []; } }, handleSearch: debounce(function () { this.fetchData(this.searchQuery); }, 500) // 防抖时间设置为500ms } }; </script> ``` #### 使用组合式 API(Vue 3) 在 Vue 3 中,可以使用 `setup` 函数和组合式 API 来组织状态和逻辑[^1]。 ```html <template> <div> <el-input placeholder="请输入关键字" v-model="searchQuery" @input="handleSearch" > <template #append> <el-button icon="el-icon-search" @click="handleSearch"></el-button> </template> </el-input> <ul> <li v-for="(item, index) in resultList" :key="index"> {{ item.name }} </li> </ul> </div> </template> <script> import { ref } from 'vue'; import axios from 'axios'; import { debounce } from 'lodash'; export default { setup() { const searchQuery = ref(''); const resultList = ref([]); const fetchData = async (query) => { if (query.trim()) { try { const response = await axios.get('/api/search', { params: { query } }); resultList.value = response.data; } catch (error) { console.error('搜索失败:', error); } } else { resultList.value = []; } }; const handleSearch = debounce(() => { fetchData(searchQuery.value); }, 500); return { searchQuery, resultList, handleSearch }; } }; </script> ``` #### 处理分页与加载更多 如果需要支持分页或加载更多功能,可以在请求参数中加入分页信息,并根据返回的数据动态更新列表[^1]。 ```javascript <script> import axios from 'axios'; import { debounce } from 'lodash'; export default { data() { return { searchQuery: '', resultList: [], currentPage: 1, pageSize: 10, total: 0 }; }, methods: { async fetchData(query, page = 1) { if (query.trim()) { try { const response = await axios.get('/api/search', { params: { query, page, pageSize: this.pageSize } }); this.resultList = response.data.list; this.total = response.data.total; } catch (error) { console.error('搜索失败:', error); } } else { this.resultList = []; this.total = 0; } }, handleSearch: debounce(function () { this.currentPage = 1; this.fetchData(this.searchQuery, this.currentPage); }, 500), loadMore() { this.currentPage += 1; this.fetchData(this.searchQuery, this.currentPage); } } }; </script> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一写代码就开心

你的打赏将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值