Element 分页查询
强风吹拂丶 人气:0前言
一般我们在做项目的时候,都是通过调用后台接口去做增删改查,但是也有例外,有些某些特定场景下,会让前端去做好增删改查. 那么我们今天就来做一下这个需求. 使用的框架是Vue,UI框架是使用率很高的ElementUI. 那么我们开干吧。
前端分页
假定我们的数据是通过点击一个添加按钮,弹出一个添加弹窗,输入好数据后,点击确定按钮,把数据保存到表格中去. 那么就是这样的
{ data () { return { page: { pageOffset: 1, // 分页页码, 默认第一页 pageCount: 20, // 一页的页数, 默认20 }, allData: [], // 表格所有数据的数据源 tableData: [] // 表格数据源 } }, methods: { // 添加按钮,弹窗一系列操作后,点击确定保存数据,调用的方法 saveData (data) { if (!data) return this.allData.push(data) this.paging() }, // 点击第一页,第二页的监听方法 pageChange (pageOffset) { this.page.pageOffset = pageOffset this.paging() }, // 分页方法 paging () { const pageOffset = this.page.pageOffset // 页码 const pageCount = this.page.pageCount // 一页显示多少个数据 this.tableData = this.allData.slice((pageOffset - 1) * pageCount, pageOffset * pageCount) } } }
具体代码差不多就是这样啦,其实是很简单,但是有的时候,可能也会没有思路。下面来总结一下前端分页的几个点:
- 需要两个变量,一个存储的是总的数据,一个存储的是我们页面需要展示的分页数据
- 然后就是根据页码和一页展示的页数通过
slice
方法去得到
查询
假如在前端分页的内容下,需求再让加上一个查询条件,去过滤数据,并且需要根据多条件过滤,那么怎么办呢? 我们可以写一个这样的方法:
// 查询数据 // val: 输入框查询的值 // data: 查询的数据源 // fuzzySearch: 是否是模糊查询 function search (key, val, data, fuzzySearch = false) { const searchTxt = val.trim() if (searchTxt === '') { return data } // 如果以空格隔开的话,则表示可以多值过滤 if (searchTxt && ~searchTxt.indexOf(' ')) { let searchTxtArr = searchTextToArr(searchTxt) return data.filter((o) => { return ~searchTxtArr.indexOf(o[key]) }) } else { // 单值过滤 return data.filter((o) => { // 是否是模糊查询 return fuzzySearch ? ~o[key].indexOf(searchTxt) : searchTxt === o[key] }) } } // 把多选查询条件变成数组 function searchTextToArr (str) { let text = str.trim() // 过滤掉多余的空格, 比如 '男 女' 中间多输入了一个空格的情况. return text.split(' ').filter((o) => { return o === '0' || o }) } // 数据 const data = [ {name: 'james', sex: '男'}, {name: 'nancy', sex: '女'}, {name: 'bob', sex: '男'}, {name: 'allen', sex: '男'}, {name: 'jack', sex: '男'}, {name: 'jasmine', sex: '女'}, ] // 测试 search('name', 'jack jasmine', data) // [{"name":"jack","sex":"男"},{"name":"jasmine","sex":"女"}] search('name', ' allen ', data) // [{"name":"allen","sex":"男"}] search('name', 'j', data, true) // [{"name":"james","sex":"男"},{"name":"jack","sex":"男"},{"name":"jasmine","sex":"女"}]
以上代码实现了模糊查询、多值查询、单值精确查询。 主要就是利用indexOf
、filter
去做过滤和判断. 另外还去做了一些用户的误操作的时候的兼容,让用户在不完全符合输入条件的时候,也能找到想要的数据。增强用户体验. 代码的话,里边写了注释,很容易懂。 如果有不懂的地方的话,可以留言跟我说一下,大家交流一下.
写在最后
今天主要分享用ElementUI写一个前端分页,然后搜索的话,怎么实现模糊查询、精确查询以及多值查询的功能。 内容比较朴素啦。 但是还是比较偏实用的。
加载全部内容