最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue+Element UI+Lumen實現(xiàn)通用表格分頁功能

 更新時間:2019年02月02日 10:36:51   作者:4Ark  
這篇文章主要介紹了Vue+Element UI+Lumen實現(xiàn)通用表格分頁功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

先說后端

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

需要獲取的參數(shù)如下:

  • pageSize(一頁數(shù)據(jù)的數(shù)量)
  • pageIndex(第幾頁的數(shù)據(jù))

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

假如現(xiàn)在給出的參數(shù)為: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();
}

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

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

改進后的代碼如下:

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);
}

再說前端

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

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

獲取數(shù)據(jù)

這里我們用 vuex來管理狀態(tài),然后在請求時帶上分頁數(shù)據(jù):

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 只是我自己封裝的一個函數(shù) 這里并不重要
   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;
   }
  },
 }
})

數(shù)據(jù)持久化

現(xiàn)在如何獲取數(shù)據(jù)已經搞定了,數(shù)據(jù)持久化我使用 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>

后記

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

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

相關文章

  • vue項目部署到nginx/tomcat服務器的實現(xiàn)

    vue項目部署到nginx/tomcat服務器的實現(xiàn)

    這篇文章主要介紹了vue項目部署到nginx/tomcat服務器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Vue響應式原理與虛擬DOM實現(xiàn)步驟詳細講解

    Vue響應式原理與虛擬DOM實現(xiàn)步驟詳細講解

    在Vue中最重要、最核心的概念之一就是響應式系統(tǒng)。這個系統(tǒng)使得Vue能夠自動追蹤數(shù)據(jù)變化,并在數(shù)據(jù)發(fā)生變化時自動更新相關的DOM元素。本文將會探討Vue響應式系統(tǒng)的實現(xiàn)原理及其底層實現(xiàn)
    2023-03-03
  • Vue組件生命周期運行原理解析

    Vue組件生命周期運行原理解析

    這篇文章主要介紹了Vue組件生命周期運行原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • vue中如何實現(xiàn)變量和字符串拼接

    vue中如何實現(xiàn)變量和字符串拼接

    這篇文章主要介紹了vue中如何實現(xiàn)變量和字符串拼接,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • vue?codemirror實現(xiàn)在線代碼編譯器效果

    vue?codemirror實現(xiàn)在線代碼編譯器效果

    這篇文章主要介紹了vue-codemirror實現(xiàn)在線代碼編譯器?,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Vue混合文件使用以及ref的引用實例詳解

    Vue混合文件使用以及ref的引用實例詳解

    ref用來輔助開發(fā)者在不依賴于jQuery的情況下,獲取DOM元素或組件的引用,下面這篇文章主要給大家介紹了關于Vue混合文件使用以及ref的引用的相關資料,需要的朋友可以參考下
    2022-12-12
  • vue項目中onscroll的坑及解決

    vue項目中onscroll的坑及解決

    這篇文章主要介紹了vue項目中onscroll的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue.js tab實現(xiàn)選項卡切換

    Vue.js tab實現(xiàn)選項卡切換

    這篇文章主要為大家詳細介紹了Vue.js組件tab實現(xiàn)選項卡切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • vue+vant 上傳圖片需要注意的地方

    vue+vant 上傳圖片需要注意的地方

    這篇文章主要介紹了vue+vant 上傳圖片需要注意的地方,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2021-01-01
  • 通過Vue實現(xiàn)Excel文件的上傳和預覽功能

    通過Vue實現(xiàn)Excel文件的上傳和預覽功能

    在業(yè)務系統(tǒng)中,Excel 文件作為一種常用的數(shù)據(jù)存儲和傳輸格式,經常需要被處理和展示,這篇文章將講解如何通過 Vue 和 xlsx.js 實現(xiàn) Excel 文件的上傳和預覽功能,需要的朋友可以參考下
    2025-04-04

最新評論

北宁市| 张北县| 富平县| 宜川县| 潼关县| 道孚县| 府谷县| 五原县| 来凤县| 贵南县| 绥棱县| 南丰县| 日喀则市| 义乌市| 德保县| 策勒县| 柘城县| 兴业县| 光山县| 新绛县| 互助| 莱州市| 临颍县| 三台县| 桐柏县| 昔阳县| 始兴县| 黔西县| 宜城市| 鱼台县| 华容县| 金湖县| 吴堡县| 新沂市| 中方县| 日喀则市| 永城市| 新竹市| 巫溪县| 浙江省| 蕲春县|