vue實(shí)現(xiàn)條件疊加搜索的解決方法
案例場(chǎng)景:
現(xiàn)在有個(gè)文章管理模塊,在該模塊中有欄目選擇、文章搜索、分頁(yè)功能。這些功能改變其中一個(gè)都會(huì)對(duì)查詢的文章有所改變。案例圖如下:

實(shí)現(xiàn)方案有兩種:
其一、我們開(kāi)始可能會(huì)想到對(duì)每個(gè)功能綁定一個(gè)處理事件,但是這樣做我們對(duì)數(shù)據(jù)的維護(hù)工作將大大加大,而且用這樣方案做數(shù)據(jù)的疊加篩選不是很好。
方案二、我們將所有提交的數(shù)據(jù)放到一起維護(hù)然后再進(jìn)行深度監(jiān)聽(tīng),當(dāng)某一個(gè)值、或多個(gè)值的改變時(shí),在去進(jìn)行數(shù)據(jù)的查詢,此時(shí)問(wèn)題也變得更易于理解與維護(hù),具體實(shí)現(xiàn)如下:
分頁(yè)代碼如下:
<template> <el-pagination background :page-size="params.pageSize" @current-change="handlePaginationChange" layout="prev, pager, next" :total="total"> </el-pagination> </template>
下拉選擇框、搜索框代碼如下:
<template> //下拉選擇框 <el-select v-model="params.categoryId" placeholder="請(qǐng)選擇欄目" size='mini' v-loading="loadingCategory"> <el-option :key='c.id' v-for='c in categories' :label="c.name" :value="c.id"></el-option> </el-select> //搜索框 <el-input placeholder="請(qǐng)輸入關(guān)鍵字" prefix-icon="el-icon-search" v-model="params.keywords" clearable> </el-input> </template>
數(shù)據(jù)維護(hù)、與方法(事件處理)
export default{
data(){
return{
... //其它的數(shù)據(jù)省略
params:{ //存儲(chǔ)分頁(yè)、搜索數(shù)據(jù)
page:0,
pageSize:3,
categoryId:undefined,
keywords:undefined
}
}
},
watch:{
params:{
handler(val){
this.findArticle(); //查找文章
},
deep:true //深度監(jiān)聽(tīng)
},
methods:{
//處理分頁(yè)
handlePaginationChange(page){
this.params.page=page-1;
},
//查詢文章
findArticle(){
axios.get('',{params:this.params})
.then(()=>{})
.catch(()=>{})
}
}
}
小結(jié):通過(guò)上面的雙向數(shù)據(jù)綁定、我們將所有數(shù)據(jù)放到 params中集中管理(進(jìn)行數(shù)據(jù)的監(jiān)聽(tīng))、當(dāng)數(shù)據(jù)發(fā)生改變時(shí)我們?nèi)フ?qǐng)求數(shù)據(jù),來(lái)局部更新表格中的數(shù)據(jù)。
存在問(wèn)題與解決:
1.這種實(shí)現(xiàn)方法的實(shí)現(xiàn)是基于所有數(shù)據(jù)的和查詢、如果我們的需求是,當(dāng)每次選擇欄目時(shí),都要顯示第一頁(yè)欄目的文章;
解決方案:
一、此時(shí)我們可以給選擇的欄目加change事件、然后將page重置為第一頁(yè)(本項(xiàng)目是從第0頁(yè)開(kāi)始),具體代碼如下:
1.1 將分頁(yè)中動(dòng)態(tài)綁定page 即: :current-page="(params.page+1)"
<template> <el-pagination background :page-size="params.pageSize" :total="total" layout="prev, pager, next" :current-page="(params.page+1)" //將頁(yè)數(shù)進(jìn)行動(dòng)態(tài)綁定這樣利于我們操作頁(yè)數(shù)的改變 @current-change="handlePaginationChange" > </el-pagination> </template>
1.2 給select添加change事件
<template>
//下拉選擇框
<el-select v-model="params.categoryId" placeholder="請(qǐng)選擇欄目" size='mini'
@change="selectChange"
>
<el-option :key='c.id' v-for='c in categories' :label="c.name" :value="c.id">
</el-option>
</el-select>
</template>
export default{
//重置page為0
selectChange(){
this.params.page=0;
},
}
***:此時(shí)我們存在的問(wèn)題是如果我們先點(diǎn)擊某一頁(yè)后然后再點(diǎn)擊欄目,那么會(huì)基于本頁(yè)去查詢選擇欄目的信息。
二、關(guān)于搜索時(shí)我的理想是對(duì)當(dāng)前頁(yè)信息進(jìn)行篩選、如果有人想要做出對(duì)所有數(shù)據(jù)的篩選、那么此時(shí)我們應(yīng)該將keywords單獨(dú)拿出來(lái)進(jìn)行,搜索這樣解決起來(lái)比加條件簡(jiǎn)單許多。
只是我目前對(duì)多個(gè)信息篩選做出的一個(gè)解決方案、如果有更加友好的處理方法、希望能留言。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue實(shí)現(xiàn)前臺(tái)列表數(shù)據(jù)過(guò)濾搜索、分頁(yè)效果
- vue實(shí)現(xiàn)多條件和模糊搜索功能
- vue實(shí)現(xiàn)搜索過(guò)濾效果
- vue實(shí)現(xiàn)搜索功能
- 基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框
- 利用vue + element實(shí)現(xiàn)表格分頁(yè)和前端搜索的方法
- vuejs通過(guò)filterBy、orderBy實(shí)現(xiàn)搜索篩選、降序排序數(shù)據(jù)
- Vue 仿百度搜索功能實(shí)現(xiàn)代碼
- vue組件實(shí)現(xiàn)可搜索下拉框擴(kuò)展
- Vue.js實(shí)現(xiàn)多條件篩選、搜索、排序及分頁(yè)的表格功能
相關(guān)文章
Vue-router不允許導(dǎo)航到當(dāng)前位置(/path)錯(cuò)誤原因以及修復(fù)方式
本文主要介紹了Vue-router不允許導(dǎo)航到當(dāng)前位置(/path)錯(cuò)誤原因以及修復(fù)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue?watch監(jiān)聽(tīng)使用的幾種方法
watch是由用戶定義的數(shù)據(jù)監(jiān)聽(tīng),當(dāng)監(jiān)聽(tīng)的屬性發(fā)生改變就會(huì)觸發(fā)回調(diào),這項(xiàng)配置在業(yè)務(wù)中是很常用。在面試時(shí),也是必問(wèn)知識(shí)點(diǎn),一般會(huì)用作和computed進(jìn)行比較。那么本文就來(lái)帶大家從源碼理解watch的工作流程,以及依賴收集和深度監(jiān)聽(tīng)的實(shí)現(xiàn)2022-12-12
基于vue-resource jsonp跨域問(wèn)題的解決方法
下面小編就為大家分享一篇基于vue-resource jsonp跨域問(wèn)題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
vue生命周期beforeDestroy和destroyed調(diào)用方式
這篇文章主要介紹了vue生命周期beforeDestroy和destroyed調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

