天天看點

`elementui`表格實作無限滾動

main.js

添加自定義指令:

Vue.directive('loadmore', {
  bind(el, binding) {
    const selectWrap = el.querySelector('.el-table__body-wrapper')
    selectWrap.addEventListener('scroll', function() {
      let sign = 10
      const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
      if (scrollDistance <= sign) {
        binding.value()
      }
    })
  }
})                

元件代碼如下:

<template>
  <div>
    <el-table
      :data="tableData.filter(data => !search || data.name.toLowerCase().includes(search.toLowerCase()))"
      v-loadmore="loadMore"
      style="width: 100%;height: 500px;"
       max-height="500px">
      <el-table-column
        label="釋出時間"
        sortable
        prop="course_date">
      </el-table-column>
      <el-table-column
        label="課程名稱"
        sortable
        prop="course_name">
      </el-table-column>
      <el-table-column
        label="課程狀态"
        sortable
        prop="course_type">
      </el-table-column>
      <el-table-column
        align="right">
        <template slot="header" slot-scope="scope">
          <el-input
            v-model="search"
            size="mini"
            placeholder="輸入關鍵字搜尋"/>
        </template>
        <template slot-scope="scope">
          <el-button
            size="mini"
            @click="handleEdit(scope.$index, scope.row)">檢視學生資訊</el-button>
          <el-button
            size="mini"
            type="danger"
            @click="handleDelete(scope.$index, scope.row)">删除課程</el-button>
        </template>
      </el-table-column>
    </el-table>
    <p v-if="nomore">沒有更多資料了</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      nomore: false,
      currentPage: 10,
      tableData: [{
        course_date: '2016-05-02',
        course_name: '國文',
        course_type: '已結束'
      }, {
        course_date: '2016-05-02',
        course_name: '數學',
        course_type: '進行中'
      }, {
        course_date: '2016-05-02',
        course_name: '計算機',
        course_type: '進行中'
      }, {
        course_date: '2016-05-02',
        course_name: '英語',
        course_type: '未釋出'
      }, {
        course_date: '2016-05-02',
        course_name: '數學',
        course_type: '進行中'
      }, {
        course_date: '2016-05-02',
        course_name: '計算機',
        course_type: '進行中'
      }, {
        course_date: '2016-05-02',
        course_name: '英語',
        course_type: '未釋出'
      }, {
        course_date: '2016-05-02',
        course_name: '數學',
        course_type: '進行中'
      }, {
        course_date: '2016-05-02',
        course_name: '計算機',
        course_type: '進行中'
      }, {
        course_date: '2016-05-02',
        course_name: '英語',
        course_type: '未釋出'
      }],
      search: ''
    }
  },
  mounted () {
  },
  methods: {
    loadMore () {
      if(this.currentPage >= 20){
        this.nomore = true
      }else{
        this.currentPage++
      this.tableData.push({
        course_date: '2016-11-02',
        course_name: 'lis',
        course_type: '未釋出'
      })
      }
    },
    handleEdit(index, row) {
      alert(row.course_name)
      this.tableData.push({
        course_date: '2016-11-02',
        course_name: 'lis',
        course_type: '未釋出'
      })
      console.log(index, row);
    },
    handleDelete(index, row) {
      console.log(index, row);
    }
  }
}
</script>
           

參考連結:https://blog.csdn.net/weixin_43953710/article/details/88846252