国产探花免费观看_亚洲丰满少妇自慰呻吟_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;   }  }, }})            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 河东区| 鸡东县| 葵青区| 肇州县| 高安市| 五河县| 广德县| 福贡县| 长乐市| 德保县| 满城县| 宜兴市| 京山县| 化隆| 从化市| 鸡泽县| 繁昌县| 民乐县| 锦屏县| 北碚区| 通河县| 泰州市| 深泽县| 三亚市| 津市市| 扎赉特旗| 焉耆| 桃江县| 滦南县| 盘山县| 建瓯市| 江门市| 德兴市| 和静县| 西盟| 昆明市| 始兴县| 沧源| 泰宁县| 仁寿县| 隆德县|