使用ElementUI寫一個(gè)前端分頁查詢的實(shí)例
前言
一般我們在做項(xiàng)目的時(shí)候,都是通過調(diào)用后臺(tái)接口去做增刪改查,但是也有例外,有些某些特定場景下,會(huì)讓前端去做好增刪改查. 那么我們今天就來做一下這個(gè)需求. 使用的框架是Vue,UI框架是使用率很高的ElementUI. 那么我們開干吧。
前端分頁
假定我們的數(shù)據(jù)是通過點(diǎn)擊一個(gè)添加按鈕,彈出一個(gè)添加彈窗,輸入好數(shù)據(jù)后,點(diǎn)擊確定按鈕,把數(shù)據(jù)保存到表格中去. 那么就是這樣的
{ data () { return { page: { pageOffset: 1, // 分頁頁碼, 默認(rèn)第一頁 pageCount: 20, // 一頁的頁數(shù), 默認(rèn)20 }, allData: [], // 表格所有數(shù)據(jù)的數(shù)據(jù)源 tableData: [] // 表格數(shù)據(jù)源 } }, methods: { // 添加按鈕,彈窗一系列操作后,點(diǎn)擊確定保存數(shù)據(jù),調(diào)用的方法 saveData (data) { if (!data) return this.allData.push(data) this.paging() }, // 點(diǎn)擊第一頁,第二頁的監(jiān)聽方法 pageChange (pageOffset) { this.page.pageOffset = pageOffset this.paging() }, // 分頁方法 paging () { const pageOffset = this.page.pageOffset // 頁碼 const pageCount = this.page.pageCount // 一頁顯示多少個(gè)數(shù)據(jù) this.tableData = this.allData.slice((pageOffset - 1) * pageCount, pageOffset * pageCount) } } }
具體代碼差不多就是這樣啦,其實(shí)是很簡單,但是有的時(shí)候,可能也會(huì)沒有思路。下面來總結(jié)一下前端分頁的幾個(gè)點(diǎn):
- 需要兩個(gè)變量,一個(gè)存儲(chǔ)的是總的數(shù)據(jù),一個(gè)存儲(chǔ)的是我們頁面需要展示的分頁數(shù)據(jù)
- 然后就是根據(jù)頁碼和一頁展示的頁數(shù)通過
slice
方法去得到
查詢
假如在前端分頁的內(nèi)容下,需求再讓加上一個(gè)查詢條件,去過濾數(shù)據(jù),并且需要根據(jù)多條件過濾,那么怎么辦呢? 我們可以寫一個(gè)這樣的方法:
// 查詢數(shù)據(jù) // val: 輸入框查詢的值 // data: 查詢的數(shù)據(jù)源 // 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] }) } } // 把多選查詢條件變成數(shù)組 function searchTextToArr (str) { let text = str.trim() // 過濾掉多余的空格, 比如 '男 女' 中間多輸入了一個(gè)空格的情況. return text.split(' ').filter((o) => { return o === '0' || o }) } // 數(shù)據(jù) 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":"女"}]
以上代碼實(shí)現(xiàn)了模糊查詢、多值查詢、單值精確查詢。 主要就是利用indexOf
、filter
去做過濾和判斷. 另外還去做了一些用戶的誤操作的時(shí)候的兼容,讓用戶在不完全符合輸入條件的時(shí)候,也能找到想要的數(shù)據(jù)。增強(qiáng)用戶體驗(yàn). 代碼的話,里邊寫了注釋,很容易懂。 如果有不懂的地方的話,可以留言跟我說一下,大家交流一下.
寫在最后
今天主要分享用ElementUI寫一個(gè)前端分頁,然后搜索的話,怎么實(shí)現(xiàn)模糊查詢、精確查詢以及多值查詢的功能。 內(nèi)容比較樸素啦。 但是還是比較偏實(shí)用的。
到此這篇關(guān)于使用ElementUI寫一個(gè)前端分頁查詢的實(shí)例的文章就介紹到這了,更多相關(guān)Element 分頁查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element-ui中實(shí)現(xiàn)tree子節(jié)點(diǎn)部分選中時(shí)父節(jié)點(diǎn)也選中
這篇文章主要介紹了element-ui中實(shí)現(xiàn)tree子節(jié)點(diǎn)部分選中時(shí)父節(jié)點(diǎn)也選中的方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08electron+vue實(shí)現(xiàn)div contenteditable截圖功能
這篇文章主要介紹了electron+vue實(shí)現(xiàn)div contenteditable截圖功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Vue報(bào)錯(cuò)Component?name"Home"should?always?be?mult
這篇文章主要介紹了Vue報(bào)錯(cuò)Component?name"Home"should?always?be?multi問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue如何從后臺(tái)獲取數(shù)據(jù)生成動(dòng)態(tài)菜單列表
這篇文章主要介紹了vue如何從后臺(tái)獲取數(shù)據(jù)生成動(dòng)態(tài)菜單列表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04Vue?vant使用ImagePreview實(shí)現(xiàn)預(yù)覽圖片
這篇文章主要介紹了Vue?vant使用ImagePreview實(shí)現(xiàn)預(yù)覽圖片,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10vue與django集成打包的實(shí)現(xiàn)方法
這篇文章主要介紹了vue與django集成打包的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11