element-ui table表格組件的具體使用


element-ui table表格組件的具體使用

el-table的格式:

<el-table>
	<el-table-column>
	</el-table-column>
</el-table>

table表格組件的屬性

由於el-table的屬性眾多這里挑常用的說明一下,其他的參見官方網址:https://element.eleme.cn/#/zh-CN/component/table

Table 屬性
:data  							顯示的數據(表格中表示的數據)
height							表格的高度(目前常用高度自適應,會隨便給一個值但不能沒有)
:border  						是否帶有縱向邊框,true為帶有,false為不帶有

Table 事件
@selection-change='function'  	                        當選擇項發生變化時會觸發該事件(會獲得選中行的數據作為參數)

Table-column 屬性
type							對應列的類型。
							如果設置了 selection 則顯示多選框;
							如果設置了 index 則顯示該行的索引(從 1 開始計算);
							如果設置了 expand 則顯示為一個可展開的按鈕
label							顯示的標題
prop							對應列內容的字段名,也可以使用 property 屬性
width							對應列的寬度
fixed							列是否固定在左側(left)或者右側(right),true 表示固定在左側
show-overflow-tooltip			                當內容過長被隱藏時顯示 tooltip(常用,相當與自適應寬度)
align							對齊方式(left/center/right) 默認左對齊

el-table-column中的組件
<template slot-scope="scope"></template>
通過scope可以獲取到 row, column, $index 和 store(table 內部的狀態管理)的數據不過一般是用來獲得row中的數據可以用"{row}"來取代"scope"

表格高度自適應

這里提供一種在配置完.js文件與main.js配置之后只需簡單的命令即可實現(可復用性高)

此方法的原作者博客鏈接:https://juejin.cn/post/6844904153534332935

具體實現步驟如下:

新建包src/util/el-table,創建adaptive.js文件與index.js文件,在main.js進行命令的全局部署,之后在頁面中直接調用命令就可以實現表格高度自適應了。

adaptive.js文件

// 設置表格高度
const doResize = async (el, binding, vnode) => {
  // 獲取表格Dom對象
  const {
    componentInstance: $table
  } = await vnode
  // 獲取調用傳遞過來的數據 
  const {
    value
  } = binding

  if (!$table.height) {
    throw new Error(`el-$table must set the height. Such as height='100px'`)
  }
  // 獲取距底部距離(用於展示頁碼等信息)
  const bottomOffset = (value && value.bottomOffset) || 30

  if (!$table) return

  // 計算列表高度並設置
  const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
  $table.layout.setHeight(height)
  $table.doLayout()
}

export default {
  // 初始化設置
  bind(el, binding, vnode) {
    // 設置resize監聽方法
    el.resizeListener = async () => {
      await doResize(el, binding, vnode)
    }
    // 綁定監聽方法到addResizeListener
    // addResizeListener(window.document.body, el.resizeListener)
    window.addEventListener('resize', el.resizeListener)
  },
  update(el, binding, vnode) {
    doResize(el, binding, vnode)
  },
  // 綁定默認高度
  async inserted(el, binding, vnode) {
    await doResize(el, binding, vnode)
  },
  // 銷毀時設置
  unbind(el) {
    // 移除resize監聽
    // removeResizeListener(el, el.resizeListener)
    window.removeEventListener('resize', el.resizeListener)
  }
}

index.js文件

import adaptive from './adaptive'

const install = function(Vue) {   
  // 綁定v-adaptive指令
  Vue.directive('adaptive', adaptive)
}

if (window.Vue) {
  window['adaptive'] = adaptive  
  // eslint-disable-next-line no-undef 
  Vue.use(install)
}

adaptive.install = install

export default adaptive

main.js文件中引入命令

import adaptive from '@/util/el-table'

Vue.use(adaptive)

頁面調用命令

<el-table
	ref="table"
	:data="tableData"
	height="100px"							//必寫
	v-adaptive="{bottomOffset: 85}"					//調用的命令
>
</el-table>

具體實例

<template>
  <div class="app-container">
    <div class="the-container">
      <el-table
        ref="multipleTable"
        v-adaptive="{bottomOffset: 85}"
        :data="tableData"
        :border="true"
        height="100px"
        @selection-change="handleSelectionChange"
      >
        <el-table-column
          type="selection"
          show-overflow-tooltip
        />
        <el-table-column
          prop="date"
          label="日期"
          show-overflow-tooltip
        />
        <el-table-column
          prop="name"
          label="姓名"
          show-overflow-tooltip
        />
        <el-table-column
          prop="address"
          label="地址"
          show-overflow-tooltip
        />
        <el-table-column
          label="操作"
          width="100px"
        >
          <template slot-scope="scope">
            <el-button
              type="text"
              @click="checkRow(scope)"
            >查看</el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="page">
        <el-pagination
          background
          layout="prev, pager, next"
          :total="1000"
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [{
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-08',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-06',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }, {
        date: '2016-05-07',
        name: '王小虎',
        address: '上海市普陀區金沙江路 1518 弄'
      }],
      multipleSelection: []
    }
  },
  methods: {
    handleSelectionChange(val) {
      this.multipleSelection = val
      console.log(this.multipleSelection)
    },
    checkRow(scope) {
      console.log(scope)
      console.log(scope.row)
    }
  }
}
</script>
<style lang="scss" scoped>
  .app-container{
    height: 100%;
    background-color: #f1f1f1;
  }
  .the-container{
    padding: 20px;
    height: 100%;
    background-color: #fff;
  }
  /*分頁組件的布局(右下角)*/
  .page {
    position: relative;
    min-height: 40px;
    padding: 16px 0 0 0;
    .el-pagination {
      position: absolute;
      right: 0;
    }
  }
</style>

map方法

當我想要取一個數組中每一個元素的一個特定字段的數據時,用for遍歷並不是很方便,map方法便能輕松解決該問題

當對選中的數據某一個具體字段進行操作時可以用map方法來返回一個新數組,會按照順序處理元素,但不會對空數組
進行檢測,不會改變原始數組。
所以handleSelectionChange可以這樣寫(批處理操作可以這樣用)

handleSelectionChange(val) {
   this.multipleSelection = val.map((item) => {
     return item.name
   })
   console.log(this.multipleSelection)
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM