日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:157日期:2023-02-17 08:07:12
目錄問題分析為什么封裝封裝的內容都有哪些封裝table組件確認數據格式封裝組件封裝全局組件table組件封裝分頁組件封裝數據定義封裝總結

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

問題分析為什么封裝

首先為什么封裝,是因為追求技術嗎,不,是因為懶,不想一直的去粘貼復制代碼,所以就想把table封裝下,可以在創建新的table的時候,只需要填充數據就行了。

封裝的內容都有哪些

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

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

封裝table組件確認數據格式

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

<el-table :data='tableData' style='width: 100%'> <el-table-column prop='date' label='日期' /> <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>

現在我們考慮數據類型,例如lebel, prop, widht 按鈕類型, 事件等等,

let paramsType = { data: Array, // 數據 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} ] } ] }

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

封裝組件封裝全局組件

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

src下創建components文件,里邊寫我們的組件,每個組件建議單獨文件夾,便于我們維護。

創建自己的table.vue組件,名字我的叫FrTable,內容暫時先不說,先說引用。

全局使用

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

代碼如下:

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}

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

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

頁面中的使用

<fr-table />table組件封裝

考慮的問題

table中有多少種情況,

正常的數據類型展示 獨有的展示方式 有操作按鈕

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

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

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

按鈕的類型

按鈕的正常使用,點擊功能 按鈕起跳轉作用 按鈕起打開新頁面的作用 按鈕起自定義事件的作用

代碼的編寫

通過上邊,我們已經分析了table的所有問題,現在只需要敲代碼就可以了。

第一種情況

<el-table :data='data' border :loading='loading'><!-- 勾選 --> <el-table-column v-if='selectionShow' type='selection' :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方法

這個方法來處理數據,

數據類型分為正常數據類型,需要轉化的數據類型,模板轉化的數據類型,

代碼如下

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},

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

第二種情況

自定義的列表

<template slot-scope='scope'> <!-- 自定義內容 --> <slot v-if='item.isSlot' :name='item.prop' :row='scope.row'/ ></template>

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

第三種

第三種按鈕分四種情況

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

按鈕其實還是循環渲染的,主要是事件的分析,通過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傳參的值

當前的參數,和我們定義的參數是一致的,因此代碼如下

// 數據 data: { type: Array, required: true }, // 表頭參數 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 background layout='prev, pager, next' :page-size='pageLimit' :total='total' :current-page='currentPage' @current-change='handleCurrentChange'/>handleCurrentChange(val) { console.log(val)}數據定義

定義如下:

total: Number,pageLimit: Number,currentPage: Number,封裝

<el-pagination background layout='prev, pager, next' :page-size='pageLimit' :total='total' :current-page='currentPage' @current-change='handleCurrentChange'/>handleCurrentChange(val) { this.$emit(’currentChange’, val)}

看上去是不是很簡單,其實就是這么簡單。

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

總結

到此這篇關于vue.js管理后臺table組件封裝的文章就介紹到這了,更多相關vue后臺table封裝內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
卡一精品卡二卡三网站乱码| 国产亚洲观看| 亚洲国产成人二区| 美女视频网站久久| 麻豆中文一区二区| 久久av日韩| 九九99久久精品在免费线bt| 精品美女在线视频| 激情亚洲影院在线观看| 日韩欧美不卡| 国产中文一区| 夜夜嗨av一区二区三区网站四季av| 午夜国产精品视频| 亚洲一区二区av| 欧美日韩在线精品一区二区三区激情综合| 日本色综合中文字幕| 日韩在线黄色| 国产乱码精品一区二区三区四区| 久久国产精品美女| 日韩大片在线| 国产精品毛片一区二区三区| 伊人久久亚洲| 国产精品天天看天天狠| 国产一区二区三区黄网站| 麻豆网站免费在线观看| 激情综合网五月| 综合激情婷婷| 久久av影视| 久久久成人网| 中文无码日韩欧| 免费看一区二区三区| 成人在线免费观看91| 国产综合欧美| 欧美日韩xxxx| 日韩国产综合| 亚洲免费影视| 国产欧美大片| 日韩一区二区在线免费| 亚洲免费婷婷| 国产精品a久久久久| 久久婷婷久久| 综合欧美精品| 国内自拍视频一区二区三区| 不卡在线一区二区| 欧美一区久久| 成人日韩在线观看| 日韩中文字幕91| 久久99久久久精品欧美| 亲子伦视频一区二区三区| 蜜臀久久99精品久久久久久9| 久久狠狠久久| 美女亚洲一区| 国产精品久久久免费| 久久精品播放| 国产精区一区二区| 精品一区欧美| 久久99精品久久久野外观看| 黄色国产精品| 精品视频在线观看网站| 丝袜美腿亚洲一区二区图片| 精品色999| 黄色成人精品网站| 麻豆91在线播放| 久久国产福利| 高潮一区二区| 欧美欧美黄在线二区| 在线精品视频在线观看高清| 精品视频在线一区二区在线| 亚洲日本国产| 欧美~级网站不卡| 久久精品一区二区国产| 免费观看在线综合色| 美女网站视频一区| 7777精品| 视频一区二区欧美| 九九精品调教| 欧美日韩一区自拍| 99亚洲视频| 日韩欧美综合| 精品中文字幕一区二区三区 | 免费人成精品欧美精品| 91综合网人人| 国产麻豆一区| 模特精品在线| 91精品国产福利在线观看麻豆| 国产日韩欧美一区二区三区| 午夜亚洲一区| 久久精品电影| 国产精品2区| 亚洲精品伊人| 中国女人久久久| 日韩一区二区三区在线免费观看| 国产精品探花在线观看| 中文字幕av亚洲精品一部二部| 欧美精品一区二区久久| 一区二区精品伦理...| 国产精品高潮呻吟久久久久| 天堂久久av| 视频在线观看国产精品| 五月天久久网站| 999精品在线| 成人日韩精品| 亚洲黄色免费av| 国产精品嫩模av在线| 丝瓜av网站精品一区二区| 久久在线免费| 日韩不卡视频在线观看| 国产一区二区三区四区五区 | 日韩欧美1区| 成人台湾亚洲精品一区二区| 国产精品久久久久久久久免费高清| 亚洲精品影视| 偷拍亚洲精品| 在线精品视频一区| 日韩中文字幕亚洲一区二区va在线 | 高潮久久久久久久久久久久久久| 欧美一区网站| 国产日产精品一区二区三区四区的观看方式 | 国产欧美在线| 日韩不卡在线观看日韩不卡视频 | 亚洲一区成人| 国产农村妇女精品一二区| 精品91久久久久| 夜夜嗨av一区二区三区网站四季av| 视频一区中文| 国产精品嫩草99av在线| 爽好多水快深点欧美视频| 视频一区在线视频| 亚洲日本欧美| 欧美日韩1区| 国产精品xxx在线观看| 国产日韩欧美在线播放不卡| 国产乱码精品一区二区亚洲| 欧美精品aa| 麻豆国产精品一区二区三区| 毛片不卡一区二区| 91中文字幕精品永久在线| 日韩欧美少妇| 国产亚洲毛片| 亚洲精品成a人ⅴ香蕉片| 欧美亚洲一区二区三区| 精品理论电影在线| 日韩不卡免费高清视频| 国产一区欧美| 男人天堂欧美日韩| 日韩精品欧美大片| 欧美一级二级视频| 岛国精品一区| 天堂日韩电影| 丝袜a∨在线一区二区三区不卡 | 在线免费观看亚洲| 国产探花一区二区| 国产a久久精品一区二区三区| 日本精品影院| 玖玖精品视频| 国产精品蜜月aⅴ在线| 国产盗摄——sm在线视频| 日本少妇一区| 久久亚洲不卡| 美女在线视频一区| 成人亚洲一区| 欧美精品九九| 日韩精品视频在线看| 国产一区二区三区不卡av| 国产一区日韩一区| 日本不卡视频在线| 日韩av在线播放网址| 国产精品7m凸凹视频分类| 亚洲乱亚洲高清| 鲁大师精品99久久久| 国模 一区 二区 三区| 日本高清久久| 日韩欧美不卡| 日韩精品视频网站| 美女一区网站| 免费观看久久久4p| 国产一区调教| 蜜臀久久99精品久久久久宅男| 久久中文字幕一区二区三区| aa亚洲婷婷| 精品免费av| 日韩中文字幕1| 国产精品毛片一区二区在线看| 黄色成人91| 嫩呦国产一区二区三区av| 亚洲手机视频| 国产精品porn| 美女久久一区| 国产精品xx| 亚洲毛片在线| 91亚洲国产| 91嫩草精品| 亚洲午夜黄色| 麻豆91精品视频| 久久精品亚洲人成影院| 日韩精品久久久久久久电影99爱| 日韩极品在线观看| 亚洲h色精品| 欧美日韩99| 亚洲欧美日韩专区|