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 相关文章推荐
jquery remove方法应用详解
Nov 22 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
微信小程序 for 循环详解
Oct 09 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
Apr 07 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
详解webpack模块化管理和打包工具
Apr 21 Javascript
layui弹出层按钮提交iframe表单的方法
Aug 20 Javascript
简单了解JavaScript异步
May 23 Javascript
微信小程序缓存支持二次开发封装实现解析
Dec 16 Javascript
vue框架中props的typescript用法详解
Feb 17 Javascript
Javascript前端下载后台传来的文件流代码实例
Aug 18 Javascript
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
php中switch语句用法详解
2015/08/17 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
YII框架http缓存操作示例
2019/04/29 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
简单谈谈python中的多进程
2016/11/06 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
同事打架检讨书
2014/02/04 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
学校联谊协议书
2014/09/16 职场文书
导游词之太湖
2019/10/08 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
详解分布式系统中如何用python实现Paxos
2021/05/18 Python