亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 12:10:44
字體:
來源:轉載
供稿:網友

前言

最近在做一個前后端分離的項目,前端使用 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;   }  }, }})

數據持久化

現在如何獲取數據已經搞定了,數據持久化我使用 vuex-localstorage,安裝后,只需要在上面代碼的基礎上添加:

import createPersist from 'vuex-localstorage'export default new vuex.Store({ // 接著上面的 plugins: [createPersist({  namespace: 'studio-user',  initialState: {},  // ONE_WEEK  expires: 7 * 24 * 60 * 60 * 1e3 })]})

公用分頁組件

<template> <el-Pagination background layout="total, sizes, prev, pager, next, jumper" :total="module.total" :current-page.sync="module.pageIndex" :page-sizes="module.pageSizes" :page-size.sync="module.pageSize" @current-change="handleCurrentChange" @size-change="handleSizeChange" > </el-Pagination></template><script>export default { props: { module: Object }, methods: { getData() {  this.$emit("get-data"); }, handleCurrentChange() {  this.getData(); }, handleSizeChange(val) {  this.getData(); } }};</script>

使用分頁組件

<template> <div class="container"> <el-table  :data="user.list"  style="width: 100%;"  >  <el-table-column   v-for="(item,index) in columns"   :key="index"   :prop="item.prop"   :label="item.label"   align="center"  />  </el-table>  <pagination  :module="user"  @get-data="getData"  /> </div></template><script>import Pagination from "@/common/components/Pagination";import { mapActions, mapState } from "vuex";export default { components: { Pagination, }, data: () => ({ columns: [  {  prop: "name",  label: "姓名"  },  {  prop: "性別",  label: "sex"  },  {  prop: "年齡",  label: "age"  }, ] }), created() { this.getData(); }, methods: {  ...mapActions({   getData : "getUser",  })  }, computed: { ...mapState(["user"]) }};</script>

后記

將一些常用的功能抽象出來,打造一個自己的工具庫,從而使開發效率更高。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产成人高清视频| 久久精品一偷一偷国产| 一本色道久久88亚洲综合88| 欧美精品福利在线| 日韩av中文字幕在线免费观看| 一区二区亚洲欧洲国产日韩| 日韩中文在线视频| 久久久天堂国产精品女人| 久久福利视频网| 成人国产精品一区| 国产91网红主播在线观看| 国产精品日韩欧美综合| 亚洲国产成人av在线| 国产在线视频2019最新视频| 国产精品91在线观看| 亚洲精品ady| 91sao在线观看国产| 91日本在线视频| 韩国三级电影久久久久久| 亚洲国产另类久久精品| 日韩欧美一区二区三区| 国产999精品久久久影片官网| 日韩欧美高清视频| 久久久久久久久久久久久久久久久久av| 亚洲高清在线观看| 性欧美暴力猛交69hd| 亚洲美女精品久久| 在线观看欧美成人| 伊人一区二区三区久久精品| 日韩免费观看av| 国产精品老女人视频| 欧美日韩在线观看视频小说| 日韩av网站导航| 九九久久久久久久久激情| 中文字幕亚洲二区| 国内精品一区二区三区| 国产精品私拍pans大尺度在线| 97精品伊人久久久大香线蕉| 亚洲一级黄色片| 国产精品久久久久久久久久久久久久| 77777亚洲午夜久久多人| 久久久久久亚洲精品中文字幕| 久久精品夜夜夜夜夜久久| 亚洲精品久久久一区二区三区| 欧美激情视频给我| 91美女高潮出水| 亚洲电影免费观看高清完整版在线| 国产又爽又黄的激情精品视频| 国产精品美女呻吟| 欧美大片va欧美在线播放| 4438全国成人免费| 97视频在线观看网址| 亚洲第一福利网| 国产日韩精品在线| 亚洲美女av在线播放| 91精品国产91久久久久久| 国产精品美乳一区二区免费| 久久久久久久999| 91亚洲人电影| 成人天堂噜噜噜| 欧美怡红院视频一区二区三区| 久99久在线视频| 尤物yw午夜国产精品视频| 亚洲欧洲视频在线| 国产九九精品视频| 日韩成人免费视频| 国产99久久久欧美黑人| 精品欧美激情精品一区| 一本色道久久88综合亚洲精品ⅰ| 欧美情侣性视频| 日韩中文字幕亚洲| 久久91精品国产91久久久| 色午夜这里只有精品| 久久精品久久久久电影| 97精品在线观看| 一区二区三区动漫| 欧美激情视频网址| 亚洲国产成人久久综合一区| 日韩中文有码在线视频| 91av在线不卡| 欧美风情在线观看| 亚洲人成电影网站色xx| 亚洲欧美另类人妖| 亚洲人成在线播放| 国产成人高清激情视频在线观看| 欧美日韩黄色大片| 美日韩在线视频| 2020久久国产精品| 中文在线资源观看视频网站免费不卡| 欧美肥婆姓交大片| 亲爱的老师9免费观看全集电视剧| 国产精品美女午夜av| 91欧美视频网站| 国产在线视频91| 欧美中文在线免费| 久久国产精品首页| 欧美一级大胆视频| 亚洲成人av在线| 日本高清不卡在线| 羞羞色国产精品| 最新国产精品亚洲| 亚洲精品日产aⅴ| 黄网站色欧美视频| 欧美在线影院在线视频| 精品国产乱码久久久久久婷婷| 欧美三级欧美成人高清www| 黄色精品在线看| 日韩精品视频在线免费观看| 精品国产乱码久久久久久婷婷| 成人妇女免费播放久久久| 欧美电影免费观看高清完整| 日韩中文字幕视频在线| 国产精品视频公开费视频| 92版电视剧仙鹤神针在线观看| 92看片淫黄大片看国产片| 亚洲欧洲视频在线| 久久人人爽人人爽人人片av高请| 欧美一级视频免费在线观看| 久久国内精品一国内精品| 国产精品27p| 91精品久久久久久久久青青| 91精品久久久久久久久青青| 亚洲国产女人aaa毛片在线| 欧美精品videofree1080p| 日韩精品在线第一页| 色综合视频网站| 在线观看91久久久久久| 亚洲欧美制服另类日韩| 911国产网站尤物在线观看| 欧美成人午夜激情在线| 亚洲综合精品一区二区| 欧美精品免费播放| 亚洲午夜激情免费视频| 欧美日韩中国免费专区在线看| 色噜噜国产精品视频一区二区| 欧美日韩性视频在线| 欧美最顶级丰满的aⅴ艳星| 91日本视频在线| 国产精品久久电影观看| 欧美自拍大量在线观看| 激情亚洲一区二区三区四区| 欧美另类69精品久久久久9999| 精品国产拍在线观看| 精品国产户外野外| 4438全国亚洲精品在线观看视频| 久久久日本电影| 欧美在线一级va免费观看| 日本欧美精品在线| 欧美午夜片在线免费观看| 亚洲毛片在线观看.| 日本在线观看天堂男亚洲| 亚洲福利视频网| 日韩中文字在线| 国产视频在线观看一区二区| 欧美在线视频播放| 亚洲成人免费网站| 日韩精品中文字幕在线播放| 伊人精品在线观看| 亚洲精品电影网站| 一区二区三区四区视频| 粉嫩av一区二区三区免费野| 久久亚洲私人国产精品va| 欧美电影免费观看高清完整| 这里只有视频精品|