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使用手册之一
Mar 24 Javascript
JavaScript的parseInt 取整使用
May 09 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
使用js的replace()方法查找字符示例代码
Oct 28 Javascript
如何在指定的地方插入html内容和文本内容
Dec 23 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
Nov 25 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 Javascript
在微信小程序中使用vant的方法
Jun 07 Javascript
vue基于better-scroll实现左右联动滑动页面
Jun 30 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 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 常用函数库和一些实用小技巧
2009/01/01 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
pytorch permute维度转换方法
2018/12/14 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
python logging模块的使用详解
2020/10/23 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
工厂厂长的职责
2013/12/12 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
关于读书的活动方案
2014/08/14 职场文书
个人总结格式范文
2015/03/09 职场文书
Python包argparse模块常用方法
2021/06/04 Python