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

vue.js管理后臺table組件封裝的方法

 更新時間:2021年08月05日 12:37:55   作者:面屏思過  
table作為數(shù)據(jù)展示組件,在日常開發(fā)中經(jīng)常被用到,這篇文章主要給大家介紹了關(guān)于vue.js管理后臺table組件封裝的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

最近開了新的項目,簡單說了自己的table封裝。

問題分析

為什么封裝

首先為什么封裝,是因?yàn)樽非蠹夹g(shù)嗎,不,是因?yàn)閼?,不想一直的去粘貼復(fù)制代碼,所以就想把table封裝下,可以在創(chuàng)建新的table的時候,只需要填充數(shù)據(jù)就行了。

封裝的內(nèi)容都有哪些

主要有兩個,一個是table組件,一個是分頁組件

搞清楚這個些,就可以開始封裝組件了。

封裝table組件

確認(rèn)數(shù)據(jù)格式

先確定數(shù)據(jù)格式,這個我們需要看下el-table組件

<el-table :data="tableData" style="width: 100%">
   <el-table-column prop="date" label="日期" width="180" />
   <el-table-column fixed="right" label="操作" width="100">
      <template slot-scope="scope">
        <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
        <el-button type="text" size="small">編輯</el-button>
     </template>
   </el-table-column>
</el-table>

現(xiàn)在我們考慮數(shù)據(jù)類型,例如lebel, prop, widht 按鈕類型, 事件等等,

let paramsType = {
  data: Array, // 數(shù)據(jù)
  loading: Boolean,
  selectionShow: Boolean,
  columns:Array = [
    { 
      label: String,
      prop: String,
      filter: Function,
      isSlot: Boolean,
      width: Number,
      tempalte: Function,
      btns: Array = [
        { name: String,
          btnType: String,
          clickType: String,
          routerType: String,
          url: String,
          query: Function,
          btnClick: Function
        }
      ]
    }
  ] 
}

定義號數(shù)據(jù)文檔后,我們就可以開始封裝組件了

封裝組件

封裝全局組件

之所以封裝全局組件是為了省事,所有的目的,全都是為了偷懶。

src下創(chuàng)建components文件,里邊寫我們的組件,每個組件建議單獨(dú)文件夾,便于我們維護(hù)。

創(chuàng)建自己的table.vue組件,名字我的叫FrTable,內(nèi)容暫時先不說,先說引用。

全局使用

導(dǎo)入FrTable文件到components下的index.js文件中,在這里遍歷所有的組件,并導(dǎo)出

代碼如下:

import TrTable from './FrTable/index'

const components = [TrTable]

const install = (Vue) => {
  components.map(component => {
    Vue.component(component.name, component)
  })
}

if (typeof Window !== 'undefined' && window.Vue) {
  install(Window.Vue)
}

export default {
  install
}

然后導(dǎo)出到main.js中,通過Vue.use()來使用組件,如下

import globalComponents from '@/components/index'
Vue.use(globalComponents)

頁面中的使用

<fr-table />

table組件封裝

考慮的問題

table中有多少種情況,

  • 正常的數(shù)據(jù)類型展示
  • 獨(dú)有的展示方式
  • 有操作按鈕

第一種的類型那我們其實(shí)是不需要操作太多,只需要通過for循環(huán)渲染就可以了。

第二種其實(shí)也還好,我們可以通過slot做定制化處理

第三種,按鈕的操作。按鈕其實(shí)可以分多種類型

按鈕的類型

  1. 按鈕的正常使用,點(diǎn)擊功能
  2. 按鈕起跳轉(zhuǎn)作用
  3. 按鈕起打開新頁面的作用
  4. 按鈕起自定義事件的作用

代碼的編寫

通過上邊,我們已經(jīng)分析了table的所有問題,現(xiàn)在只需要敲代碼就可以了。

第一種情況

<el-table :data="data" border :loading="loading">
        <!-- 勾選 -->
   <el-table-column v-if="selectionShow" type="selection" width="50" align="center" :reserve-selection="true" />
     <template v-for="(item, index) in columns">
        <el-table-column :key="index" v-bind="item">
            <!-- 自定義表頭 -->
          <template v-if="item.customHeader" slot="header">
              <slot :name="item.headerProp" />
          </template>
          <template slot-scope="scope">
               <span v-html="handleFilter(item, scope.row, item.prop)" />
          </template>
        </el-table-column>
     </template>
 </el-table>

這里我們可以看到handleFilter方法

這個方法來處理數(shù)據(jù),

數(shù)據(jù)類型分為正常數(shù)據(jù)類型,需要轉(zhuǎn)化的數(shù)據(jù)類型,模板轉(zhuǎn)化的數(shù)據(jù)類型,

代碼如下

handleFilter(item, val, prop) {
  let value = val[prop]
  if (item.templet) value = item.templet(val)
  return item.filter ? this.$options.filters[item.filter](val[prop]) : value
},

第一種情況比較簡單,只是簡單的數(shù)據(jù)渲染,和定制化的表頭渲染,上邊總體的是多選功能+正常的表單

第二種情況

自定義的列表

<template slot-scope="scope">
   <!-- 自定義內(nèi)容 -->
   <slot
      v-if="item.isSlot"
      :name="item.prop"
      :row="scope.row"/
   >
</template>

自定義的類別,我們只需要isSlot設(shè)置為true,name為prop,row為data

第三種

第三種按鈕分四種情況

<template v-if="item.btns">
   <el-button
     v-for="(btn, i) in item.btns"
     :key="i"
    class="mr_10"
    :size="btn.mini ? btn.mini: 'small'"
    :type="btn.type ? btn.type: 'primary'"
    @click="btnClickfunc(btn, scope.row)"
  >
     {{ btn.name }}
  </el-button>
</template>

按鈕其實(shí)還是循環(huán)渲染的,主要是事件的分析,通過btnClickfunc事件操作。

btnClickfunc(column, row) {
      const path = {
        [column.routerType]: column.url,
        query: column.query ? column.query(row) : ''
      }
      if (column.clickType === 'router') {
        this.$router.push(path)
      } else if (column.clickType === 'router_blank') {
        const routeData = this.$router.resolve(path)
        window.open(routeData.href, '_blank')
      } else if (column.clickType === 'btnClick') {
        column.btnClick(row)
      } else {
        this.$emit('btnClickFunc', { column: column, row: row })
      }
},

分不同的類型,我們做不同的處理。

props傳參的值

當(dāng)前的參數(shù),和我們定義的參數(shù)是一致的,因此代碼如下

  // 數(shù)據(jù)
    data: {
      type: Array,
      required: true
    },
    // 表頭參數(shù)
    columns: {
      type: Array,
      required: true
    },
    loading: {
      type: Boolean,
      default: false
    },
    // 多選框選擇
    selectionShow: {
      type: Boolean,
      default: false
    },

自此,只剩下了組件的使用方式了

組件的使用

<fr-table
      ref="mt"
      :loading="loading"
      :data="list"
      :columns="columns"
    >
</fr-table>

大致如下,如果需要使用多選的時候,自行定義方法,排序也一樣。

分頁組件封裝

參考element分頁組件

<el-pagination
  style="margin-top:40px;"
  background
  layout="prev, pager, next"
  :page-size="pageLimit"
   :total="total"
   :current-page="currentPage"
   @current-change="handleCurrentChange"
/>
handleCurrentChange(val) {
   console.log(val)
}

數(shù)據(jù)定義

定義如下:

total: Number,
pageLimit: Number,
currentPage: Number,

封裝

<el-pagination
  style="margin-top:40px;"
  background
  layout="prev, pager, next"
  :page-size="pageLimit"
  :total="total"
  :current-page="currentPage"
  @current-change="handleCurrentChange"
/>

handleCurrentChange(val) {
   this.$emit('currentChange', val)
}

看上去是不是很簡單,其實(shí)就是這么簡單。

然后我們在組件上把分頁事件和參數(shù)加上,我們整個table的組件封裝就完成了,至此,我們完成了整個table組件封裝的全部工作。

總結(jié)

到此這篇關(guān)于vue.js管理后臺table組件封裝的文章就介紹到這了,更多相關(guān)vue后臺table封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對vue中v-if的常見使用方法詳解

    對vue中v-if的常見使用方法詳解

    今天小編就為大家分享一篇對vue中v-if的常見使用方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue中函數(shù)防抖節(jié)流的理解及應(yīng)用實(shí)現(xiàn)

    Vue中函數(shù)防抖節(jié)流的理解及應(yīng)用實(shí)現(xiàn)

    這篇文章主要介紹了Vue中函數(shù)防抖節(jié)流的理解及應(yīng)用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • ant-design-vue前端UI庫,如何解決Table中時間格式化問題

    ant-design-vue前端UI庫,如何解決Table中時間格式化問題

    這篇文章主要介紹了ant-design-vue前端UI庫,如何解決Table中時間格式化問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue項目中如何實(shí)現(xiàn)網(wǎng)頁的截圖功能?(html2canvas)

    vue項目中如何實(shí)現(xiàn)網(wǎng)頁的截圖功能?(html2canvas)

    這篇文章主要介紹了vue項目中如何實(shí)現(xiàn)網(wǎng)頁的截圖功能?(html2canvas),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 圖文詳解Vue3沒有代碼提示問題的解決辦法

    圖文詳解Vue3沒有代碼提示問題的解決辦法

    最近在使用Vue.js時候沒有自動提示,就很難受,下面這篇文章主要給大家介紹了關(guān)于Vue3沒有代碼提示問題的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Element plus實(shí)現(xiàn)圖片手動上傳與回顯的過程

    Element plus實(shí)現(xiàn)圖片手動上傳與回顯的過程

    近期,發(fā)現(xiàn)點(diǎn)擊修改,element ui 的圖片沒有回顯到框中,所以本文給大家介紹了Element plus實(shí)現(xiàn)圖片手動上傳與回顯的過程,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-09-09
  • Vue3 中的數(shù)據(jù)偵測的實(shí)現(xiàn)

    Vue3 中的數(shù)據(jù)偵測的實(shí)現(xiàn)

    這篇文章主要介紹了Vue3 中的數(shù)據(jù)偵測的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Vue利用ref屬性更改css樣式的操作方法

    Vue利用ref屬性更改css樣式的操作方法

    在Vue.js的應(yīng)用開發(fā)中,我們經(jīng)常會遇到需要動態(tài)修改DOM元素樣式的情況,Vue提供了多種方式來實(shí)現(xiàn)這一目標(biāo),其中ref是一個非常有用且靈活的工具,本文將深入探討如何在Vue項目中利用ref屬性來更改CSS樣式,并通過多個實(shí)例演示其具體用法,需要的朋友可以參考下
    2024-10-10
  • vue3如何定義變量及ref、reactive、toRefs特性說明

    vue3如何定義變量及ref、reactive、toRefs特性說明

    這篇文章主要介紹了vue3如何定義變量及ref、reactive、toRefs特性說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • elementUI多選框反選的實(shí)現(xiàn)代碼

    elementUI多選框反選的實(shí)現(xiàn)代碼

    這篇文章主要介紹了elementUI多選框反選的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

西昌市| 九寨沟县| 松原市| 石泉县| 湾仔区| 白银市| 广南县| 新平| 宜宾县| 葫芦岛市| 潞西市| 镇原县| 西贡区| 太谷县| 新巴尔虎右旗| 通州市| 樟树市| 醴陵市| 太谷县| 靖州| 合水县| 文山县| 商水县| 桐城市| 宣化县| 应用必备| 成安县| 蕲春县| 如东县| 平塘县| 明水县| 西充县| 郴州市| 溧阳市| 古浪县| 东至县| 蒲城县| 连云港市| 玉山县| 二连浩特市| 基隆市|