国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue+Element UI+Lumen實現通用表格分頁功能

2024-05-06 15:42:38
字體:
來源:轉載
供稿:網友

前言

最近在做一個前后端分離的項目,前端使用 Vue+ Element UI,而后端則使用 Lumen 做接口開發,其中分頁是必不可少的一部分,本文就介紹如何基于以上環境做一個簡單、可復用的分頁功能。

先說后端

后端做的事情不多,只需要接受幾個參數,根據參數來獲取數據即可。

需要獲取的參數如下:

pageSize(一頁數據的數量) pageIndex(第幾頁的數據)

然后就可以根據這兩個參數計算出偏移量,再從數據庫中取出相應的數據。

假如現在給出的參數為:pageSize=10pageIndex = 2,也就是說每一頁要10條記錄,要第二頁。

計算偏移量的公式為:pageSize * (pageIndex - 1)

基本代碼如下:

public function getUser(Request $request){ $pageSize = $request->input('pageSize'); $pageIndex = $request->input('pageIndex'); $offset = $pageSize * ($pageIndex - 1); return User::offset($offset)    ->limit($pageSize)    ->get();}

后端基本上只需要做這么多,就可以完成一個分頁的功能了,但還是有幾處地方需要改進一下:

給參數一個默認值 前端還需要知道整個表的數據的總數 把分頁做成一個公用的函數

改進后的代碼如下:

private $default_page_size = 30;private $default_page_index = 1;// 公用分頁public function pagination($request, $list) { $pageSize = $request->input('pageSize', $this->default_page_size); $pageIndex = $request->input('pageIndex', $this->default_page_index); $offset = $pageSize * ($pageIndex - 1); $total = $list->count(); $list = $list   ->offset($offset)   ->limit($pageSize); return [ 'list' => $list->get(), 'total' => $total, ];}// 獲取用戶列表public function getUser(Request $request) { $list = User::query(); /*  這里可以做一些查詢之類的操作 */ return $this->pagination($request, $list);}

再說前端

前端相對于需要做的事情就比較多了,需要考慮幾點:

獲取數據時需要帶上分頁的參數 分頁參數需要進行本地持久化,以免刷新頁面回到第一頁(后端設置的默認值) 同樣要抽象出一個通用的分頁組件

獲取數據

這里我們用 vuex來管理狀態,然后在請求時帶上分頁數據:

store.js:

注意:

這里為了方便展示代碼,并沒有使用模塊化,項目中,最好將使用模塊化方便管理。 這里默認讀者清楚 ES6 的語法
export default new vuex.Store({ state : {  user : {   list: [],   total: 0,   pageIndex: 1,   pageSize: 10,  } }, mutations: { updateUser(state, data) { state.user = { ...state.user, ...data, } },  }, actions: {  async getUser({commit,state,getters}) {   // $axios 只是我自己封裝的一個函數 這里并不重要   const res = await $axios.get('/user',getters.requestData(state.user))   commit('updateUser',res);  }, }, getters:{  requestData(state) {   return (origin) => {    const {     pageIndex,     pageSize,    } = origin;    const data = {     pageIndex,     pageSize,    };    return data;   }  }, }})            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阿克苏市| 丰台区| 东乌| 海阳市| 新兴县| 庆云县| 平泉县| 墨脱县| 于都县| 南皮县| 科技| 阿勒泰市| 巴彦县| 江华| 保山市| 新民市| 承德县| 察雅县| 六安市| 八宿县| 库尔勒市| 闽清县| 凤翔县| 喀什市| 盘锦市| 柘城县| 察隅县| 玛纳斯县| 达孜县| 牟定县| 万宁市| 德州市| 霍山县| 裕民县| 江北区| 皋兰县| 体育| 镇远县| 桃园市| 华阴市| 伊吾县|