美文网首页
vue中实现数据懒加载

vue中实现数据懒加载

作者: Henry01 | 来源:发表于2022-08-19 18:31 被阅读0次

需求:用element-ui渲染了一个表格,由于后端返回了大量数据并且没实现分页,需前端自行处理,所以做了一个懒加载功能,代码如下:

1,HTML

<el-table
          border
          ref="myTable"
          style="width: 100%"
          height="350"
          :data="tableData"
          v-loading = "isLoading"
          element-loading-background = "rgba(255, 255, 255, .5)"
          element-loading-text = "加载中,请稍后..."
          element-loading-spinner = "el-icon-loading">
          <el-table-column align="center" prop="create_node" label="行点新增"> </el-table-column>
          <el-table-column align="center" prop="modify_node" label="修改形点"> </el-table-column>
          <el-table-column align="center" prop="delete_node" label="删除形点"> </el-table-column>
          <el-table-column align="center" prop="create_object" label="新增对象"> </el-table-column>
          <el-table-column align="center" prop="modify_object" label="修改对象"> </el-table-column>
          <el-table-column align="center" prop="delete_object" label="删除对象"> </el-table-column>
        </el-table>

2、JS

data () {
    return {
      isLoading: false,
      tableData: [],
      oldData: [],
      currentPage: 1
    }
  },

mounted () {
    this.ListFn()
    this.tableListener()
  },

methods: {
    // 获取列表数据
    async ListFn () {
      this.isLoading = true
      const res = await PerfToDateStatistics(this.queryForm)
      this.oldData = res.data || []
      this.initData()
      this.isLoading = false
    },

    // 数据请求完带 把数据给 this.oldData
    // 之后调用  initData  获取当前数据第一次数据, 在滚动时  让currentPage + 1, 之后再 initData
    initData  () {
      const pageSize = 10
      const currentPage = this.currentPage += 1
      if (pageSize * this.currentPag > this.oldData.length) return false
      this.tableData = [...this.tableData, ...this.pagination(pageSize, currentPage, this.oldData)]
    },

   // 数据叠加处理
    pagination (pageSize, currentPage, arr) {
      var skipNum = (currentPage - 1) * pageSize
      var newArr = (skipNum + pageSize >= arr.length) ? arr.slice(skipNum, arr.length) : arr.slice(skipNum, skipNum + pageSize)
      return newArr
    },

    // 监听页面滚动
    tableListener () {
      const that = this
      const dom = that.$refs.myTable.bodyWrapper
      dom.addEventListener('scroll', function () {
        const scrollDistance = dom.scrollHeight - dom.scrollTop - dom.clientHeight
        if (scrollDistance <= 0) { // 等于0证明已经到底,可以请求接口
          that.initData()
        }
      })
    },

}

相关文章

网友评论

      本文标题:vue中实现数据懒加载

      本文链接:https://www.haomeiwen.com/subject/zpqzirtx.html