vue实现条件叠加搜索的解决方法


Posted in Javascript onMay 28, 2019

案例场景:

现在有个文章管理模块,在该模块中有栏目选择、文章搜索、分页功能。这些功能改变其中一个都会对查询的文章有所改变。案例图如下:

vue实现条件叠加搜索的解决方法

实现方案有两种:

其一、我们开始可能会想到对每个功能绑定一个处理事件,但是这样做我们对数据的维护工作将大大加大,而且用这样方案做数据的叠加筛选不是很好。

方案二、我们将所有提交的数据放到一起维护然后再进行深度监听,当某一个值、或多个值的改变时,在去进行数据的查询,此时问题也变得更易于理解与维护,具体实现如下:

分页代码如下:

<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="请选择栏目" 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="请输入关键字"
 prefix-icon="el-icon-search"
 v-model="params.keywords"
  clearable>
</el-input>
</template>

数据维护、与方法(事件处理)

export default{
 data(){
  return{
   ... //其它的数据省略
 
   params:{ //存储分页、搜索数据
   page:0,
   pageSize:3,
   categoryId:undefined,
   keywords:undefined
   }
  }
 },
 watch:{
 params:{
  handler(val){
   this.findArticle(); //查找文章
  },
  deep:true //深度监听
 },
 methods:{
  //处理分页
  handlePaginationChange(page){
   this.params.page=page-1;
  }, 
  //查询文章
  findArticle(){
   axios.get('',{params:this.params})
   .then(()=>{})
   .catch(()=>{})
  }
 }
 
}

小结:通过上面的双向数据绑定、我们将所有数据放到 params中集中管理(进行数据的监听)、当数据发生改变时我们去请求数据,来局部更新表格中的数据。

存在问题与解决:

1.这种实现方法的实现是基于所有数据的和查询、如果我们的需求是,当每次选择栏目时,都要显示第一页栏目的文章;

解决方案:

一、此时我们可以给选择的栏目加change事件、然后将page重置为第一页(本项目是从第0页开始),具体代码如下:

1.1 将分页中动态绑定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)" //将页数进行动态绑定这样利于我们操作页数的改变
  @current-change="handlePaginationChange"
  >
 </el-pagination>
 
</template>

1.2  给select添加change事件

<template> 
 //下拉选择框
 <el-select v-model="params.categoryId" placeholder="请选择栏目" 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;
 },
}

***:此时我们存在的问题是如果我们先点击某一页后然后再点击栏目,那么会基于本页去查询选择栏目的信息。

二、关于搜索时我的理想是对当前页信息进行筛选、如果有人想要做出对所有数据的筛选、那么此时我们应该将keywords单独拿出来进行,搜索这样解决起来比加条件简单许多。

只是我目前对多个信息筛选做出的一个解决方案、如果有更加友好的处理方法、希望能留言。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs使用总结(非常详细)
Mar 22 Javascript
用js读、写、删除Cookie代码续篇
Dec 03 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
Aug 31 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
jQuery实现产品对比功能附源码下载
Aug 09 Javascript
jQuery Raty 一款不错的星级评分插件
Aug 24 Javascript
javascript实现右下角广告框效果
Feb 01 Javascript
bootstrap multiselect下拉列表功能
Aug 22 Javascript
基于Require.js使用方法(总结)
Oct 26 Javascript
详解node child_process模块学习笔记
Jan 24 Javascript
vue props default Array或是Object的正确写法说明
Jul 30 Javascript
jQuery实现动态操作table行
Nov 23 jQuery
webpack4 从零学习常用配置(小结)
May 28 #Javascript
详解ES6 export default 和 import语句中的解构赋值
May 28 #Javascript
jQuery实现高级检索功能
May 28 #jQuery
利用原生JS实现data方法示例代码
May 28 #Javascript
php结合js实现多条件组合查询
May 28 #Javascript
vue实现前台列表数据过滤搜索、分页效果
May 28 #Javascript
js 将线性数据转为树形的示例代码
May 28 #Javascript
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
关于php内存不够用的快速解决方法
2013/10/26 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
简单JS代码压缩器
2006/10/12 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
用原生js做单页应用
2017/01/17 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
python中__call__内置函数用法实例
2015/06/04 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
高中生学习生活的自我评价
2013/10/09 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
学习经验交流会总结
2015/11/02 职场文书
《刷子李》教学反思
2016/02/20 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
索尼ICF-36收音机评测
2022/04/30 无线电