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

首頁 > 編程 > JavaScript > 正文

vue項目中將element-ui table表格寫成組件的實現代碼

2019-11-19 11:21:22
字體:
來源:轉載
供稿:網友

表格中我們經常需要動態加載數據, 如果有多個頁面都需要用到表格, 那我希望可以有個組件, 只傳數據過去顯示, 不用每個頁面都去寫這么一段內容:

<el-table :data="tableData" border size="mini" fit highlight-current-row height="500">  <el-table-column type="index" align="center" fixed></el-table-column>  <el-table-column prop="DHM" min-width="140px" label="時間" align="center"></el-table-column>  <el-table-column prop="PLAZANO" min-width="100px" label="編碼" align="center"></el-table-column>  <el-table-column prop="PLAZANAME" min-width="100px" label="名稱" align="center"></el-table-column>  <el-table-column prop="CAR_PLATE" label="號碼" align="center"></el-table-column>  <el-table-column prop="CARD_NO" min-width="120px" label="卡號" align="center"></el-table-column>  <el-table-column prop="DATATYPE" label="數據類型" align="center" :formatter="formatDATATYPE"></el-table-column>  <el-table-column prop="STAFFNAME" min-width="100px" label="姓名" align="center"></el-table-column>  <el-table-column prop="MEDIATYPE" label="付款方式" align="center"></el-table-column>  <el-table-column prop="COMP_CASH" label="計算費額" align="center"></el-table-column>  <el-table-column prop="FACT_CASH" label="實收費額" align="center"></el-table-column>  <el-table-column label="操作" min-width="140px" align="center">    <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>

 上面這段代碼是一個element-ui中tabele表格的形式,這里表頭都是已經固定的, 如果每個頁面都寫上這么一段, 不同的是表頭名字和字段,這樣子就有點重復,而且頁面的篇幅也就比較大了,于是把這塊寫成一個組件, 每個頁面引入這個組件, 再傳入數據。

  1.  表格組件:

•首先  table.vue 組件可以這樣寫:

<el-table :data="tableData" border size="mini" fit highlight-current-row height="500" :row-style="rowStyle" @row-dblclick="rowDblclick"   v-loading="loading"   element-loading-text="拼命加載中"   element-loading-spinner="el-icon-loading"   element-loading-background="rgba(0, 0, 0, 0.3)">   <el-table-column type="index" align="center" fixed></el-table-column>   <!-- prop: 字段名name, label: 展示的名稱, fixed: 是否需要固定(left, right), minWidth: 設置列的最小寬度(不傳默認值), oper: 是否有操作列      oper.name: 操作列字段名稱, oper.clickFun: 操作列點擊事件, formatData: 格式化內容 -->   <el-table-column v-for="(th, key) in tableHeader"    :key="key"    :prop="th.prop"    :label="th.label"    :fixed="th.fixed"    :min-width="th.minWidth" align="center">     <!-- 加入template主要是有操作一欄, 操作一欄的內容是相同的, 數據不是動態獲取的,不過我這里操作一欄的名字定死了(oper表示是操作這一列,否則就不是) -->     <template slot-scope="scope">      <div v-if="th.oper">       <el-button v-for="(o, key) in th.oper" :key="key" @click="o.clickFun(scope.row)" type="text" size="small">{{o.name}}</el-button>      </div>      <div v-else>       <span v-if="!th.formatData">{{ scope.row[th.prop] }}</span>       <span v-else>{{ scope.row[th.prop] | formatters(th.formatData) }}</span>      </div>     </template>   </el-table-column></el-table>
// 這里是傳入的數據 props: {  tableData: {   type: Array,   default: function () {    return []   }  },  rowDblclick: {   type: Function,   default: (row, event, column) => { console.log('default: ' + row + '---' + event + '---' + column) }  },  tableHeader: {   type: Array,   default: function () {    return []   }  },  loading: {   type: Boolean,   default: false  } },

• 然后在其他組件中就可以引入table組件, 將數據傳給table顯示

 <table :tableData="tableData" :rowDblclick="rowDblclick" :tableHeader="tableHeader" :loading="loading"></table>

    其中 tableData是表格中要顯示的數據內容, 這個內容我的是從后臺查詢出來的, rowDblclick 是雙擊一行做的操作,如果不需要可以刪除, tableHeader 是表頭顯示的數據, loading 是表格加載的loading方式, 默認是沒有的

  表頭數據格式如下: formatData 是表格里面的數據需要做處理的方法, oper是操作列,查看和編輯是兩個按鈕,handleClick和editClick點擊按鈕的方法, 自行補充。

export const tableHeader = [ // 表頭數據 { prop: 'dhm', label: '時間', minWidth: '140px' }, { prop: 'plazano', label: '編碼', minWidth: '100px' }, { prop: 'plazano', label: '名稱', minWidth: '100px', formatData: val => store.getters.allPlazano2Map.get(val) }, { prop: 'car_plate', label: '號碼' }, { prop: 'card_no', label: '卡號', minWidth: "120px" }, { prop: 'laneno', label: '數據類型', formatData: function(val) { return val.substr(2, 1) == '1' ? '出口' : '入口' } }, { prop: 'staffname', label: '姓名', minWidth: '100px' }, { prop: 'mediatype', label: '付款方式' }, { prop: 'comp_cash', label: '計算費額' }, { prop: 'fact_cash', label: '實收費額' }, { prop: 'oper', label: '操作', fixed: 'right', minWidth: '140px',  oper: [   { name: '查看', clickFun: handleClick },   { name: '編輯', clickFun: editClick }  ] }]

現在的代碼可能會報錯, 下面這處的代碼是在全局注冊了一個過濾器,如果不注冊就找不到這個方法就會報錯,所以還需要注冊一個全局過濾器,如果你不需要對數據做處理可以不要這個過濾器

  2.  注冊全局過濾器, 我的是這樣寫的, 先新建個文件 filter.js 然后在里面寫個方法, export 出去

export function formatters(val, format) {  if (typeof (format) === 'function') {   return format(val)  } else return val}

  然后再在main.js中引入進來注冊全局的過濾器:

import * as filters from './filters'Object.keys(filters).forEach(key => {  Vue.filter(key, filters[key])})

  這個在每個頁面就都可以使用 formatters 這個過濾器方法了, 不過具體的過濾方法是由 format 這個參數傳進去的, 這里主要是因為不同的數據過濾的方法不一樣, 所以在表頭傳數據的時候就一并寫上處理數據的方法

  如果很多地方都使用了同一個方法, 可以將這個方法注冊成全局方法, 那么在每個頁面就可以直接使用該方法, 不用重復去寫。

  3.   注冊全局方法

  建立個js 文件(我的文件名為validate.js), 寫入該方法, 這里使用 exports.install 注冊全局方法,掛載到vue原型上

exports.install = (Vue, options) => { Vue.prototype.validator = {  lanenoTransf(val) { return val.substr(2, 1) == '1' ? '出口' : '入口' } }}

   然后在main.js中引入

import validator from '@/utils/validate'Vue.use(validator)

  最后頁面上就可以直接使用

{ prop: 'laneno', label: '數據類型', formatData: this.lanenoTransf },

最最后, 看我的表格:

總結

以上所述是小編給大家介紹的vue項目中將element-ui table表格寫成組件的實現代碼 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩aaaa| 欧美在线视频一二三| 欧美丰满老妇厨房牲生活| 国产成人精品视| 成人美女av在线直播| 国产精品色婷婷视频| 97人洗澡人人免费公开视频碰碰碰| 国产精品成人一区| 亚洲天堂网在线观看| 精品综合久久久久久97| 麻豆国产精品va在线观看不卡| 欧美精品videos性欧美| 欧美激情网站在线观看| 欧美激情第一页xxx| 亚洲精品99久久久久中文字幕| 欧美激情2020午夜免费观看| 日韩中文字幕欧美| 欧美亚洲国产日本| 欧美一级黑人aaaaaaa做受| 亚洲美女在线看| 在线日韩欧美视频| 九九热99久久久国产盗摄| 成人欧美在线视频| 亚洲香蕉成视频在线观看| 日韩免费中文字幕| 日韩在线观看免费高清完整版| 欧美日韩不卡合集视频| 日韩**中文字幕毛片| 日韩av手机在线观看| 中文字幕精品久久| 欧美黑人一区二区三区| 亚洲欧洲视频在线| 国产精品∨欧美精品v日韩精品| 欧美午夜丰满在线18影院| 久久久久久久久久婷婷| 日本久久久久久久久久久| 欧美专区福利在线| 亚洲免费一在线| 午夜精品99久久免费| 美乳少妇欧美精品| 亚洲片在线资源| 日韩最新av在线| 久久精品国产综合| 亚洲最大福利视频网| 午夜精品久久久久久久99热浪潮| 久久久久久国产| 精品亚洲男同gayvideo网站| 欧美激情精品久久久| 2019中文字幕免费视频| 国产精品亚发布| 国产一区在线播放| 91国语精品自产拍在线观看性色| 欧美激情视频在线观看| 成人免费看吃奶视频网站| 久久免费视频网站| 国产日产欧美a一级在线| 欧美精品日韩三级| 国产精品69久久久久| 亚洲xxxx3d| 国产精品自拍视频| 国产精品专区第二| 中文字幕最新精品| 精品国偷自产在线视频| 96sao精品视频在线观看| 欧美一级大片在线观看| 成人h视频在线观看播放| 亚洲精品videossex少妇| 精品久久久久久久久国产字幕| 欧美激情喷水视频| 欧美日韩国产一区二区| 97在线视频免费| 午夜精品在线观看| 中文字幕在线日韩| 欧美巨猛xxxx猛交黑人97人| 国产午夜精品免费一区二区三区| 国产成人精品网站| 欧美成人午夜免费视在线看片| 亚洲综合自拍一区| 中文字幕精品视频| 欧美俄罗斯性视频| 狠狠躁夜夜躁人人爽天天天天97| 日韩欧美在线网址| 成人有码视频在线播放| 91国产美女视频| 国产成人免费91av在线| 国产成人精品一区二区三区| 亚洲男人av电影| 久久精品男人天堂| www亚洲欧美| 亚洲一二在线观看| 国产欧美精品一区二区| 欧美成人免费全部观看天天性色| 91大神在线播放精品| www国产精品视频| 777国产偷窥盗摄精品视频| 欧美激情精品久久久久久免费印度| 日韩av中文字幕在线免费观看| 91久久在线视频| 日韩大胆人体377p| 亚洲欧美中文字幕在线一区| 色综合天天综合网国产成人网| 97精品一区二区视频在线观看| 国产精品高潮呻吟久久av无限| 成人精品视频99在线观看免费| 97热在线精品视频在线观看| 亚洲第一视频网| 91亚洲精品久久久久久久久久久久| 亚洲欧美在线免费| 伊人亚洲福利一区二区三区| 欧美成人精品激情在线观看| 亚洲精品999| 国产亚洲精品成人av久久ww| 亚洲视频axxx| 日韩在线播放av| 精品国产精品三级精品av网址| 久久久久久久激情视频| 亚洲精品色婷婷福利天堂| 久久成人国产精品| 欧美日韩午夜激情| 在线精品国产成人综合| 精品福利樱桃av导航| 日韩在线观看网站| 国产97在线视频| 在线观看国产精品日韩av| 欧美自拍视频在线| 国产精品免费久久久久久| 亚洲国产美女精品久久久久∴| 欧美第一页在线| 日本一区二区三区四区视频| 综合网日日天干夜夜久久| 亚洲亚裔videos黑人hd| 久久久噜噜噜久久中文字免| 超碰91人人草人人干| 欧美综合在线观看| 久久男人的天堂| 国产欧美一区二区三区视频| 亚洲精品国产美女| 国产欧美日韩免费| 成人免费视频网址| 亚洲人成绝费网站色www| 岛国视频午夜一区免费在线观看| 国产美女久久久| 日韩人体视频一二区| 色综合老司机第九色激情| 久久精品中文字幕| 国产精品第2页| 亚洲电影免费在线观看| 欧美日韩在线观看视频| 日韩免费电影在线观看| 国内精品久久久久久| 精品久久久久久亚洲国产300| 97色在线播放视频| 国产美女精品视频免费观看| 91久久久国产精品| 精品久久久久久久久久国产| 国产精品久久久av| 欧美日韩国产在线看| 亚洲成色777777女色窝| 日韩在线播放视频| 亚洲国产成人在线播放| 欧美丰满少妇xxxx| 国产男人精品视频| 久久99精品久久久久久琪琪| 国产精品免费久久久久久|