vue+elementui 实现table懒加载

  • 实现原理: 判断表格滚动条是否滚动到底部
    scrollHeight: 元素的高度即表格内容的高度
    scrollTop: 元素滚动出去的高度
    clientHeight: 元素可视区域的高度
    当scrollTop + clientHeight = scrollHeight 时,滚动条滚动到底部
自定义指令 ----- 可以写在main.js中,或者单独写js文件再使用Vue.use('文件名')注册
Vue.directive('loadmore', {
    bind(el, binding) {
        let loadmore = binding.value.loadmore, // 列表请求接口
            callback = binding.value.callback, // 处理响应数据
            selectWarp = el.querySelector('.el-table__body-wrapper')
          // 监听滚动事件  
         selectWarp.addEventListener('scroll', function() {
             let sign = 0
             const scrollDistance = this.scrollHeight - this.scrollTop - this.cilentHeight
             if(scrollDistance <= sign) {
                 // 滚动条到底部
                 loadmore(callback) // 请求接口并传入回调函数
             }
         })   
            
    }
})

list.vue — 需要表格懒加载的页


<template>
    <div>
        <!-- 回调函数名称必须为callback,使用别的方法名,需要像如下格式书写 -->
        <el-table max-height="550" :data="dataList" v-loadmore="{loadmore,calllback: viewData}">
        </el-table>
    </div>
</template>

<script>
    export default {
        data() {
            dataList: [],
            isLastPage: false,
            page: 1,
            limit: 10
        },
        menthods: {
            loadmore(callback) {
                if(this.isLastPage) return
                if(this.page == 1) this.page++
                this.axios({
                    method: 'get',
                    url: 'xxxxxxxxxx',
                    params: {
                        page: this.page,
                        limit: this.limit
                    }
                }).thne(res => {
                    if(res.success) {
                        if(res.result.list.length > 0) {
                            if(this.page < res.result.pages) this.page++
                            else this.isLastPage = true
                            res.result.list.forEach(item => {
                                this.dataList push({...item})
                            })
                        } else this.isLastPage = true
                        callback && callback(this.dataList)
                    } else this.$message.error(res.result.message)
                })
            }
        }
    }
</script>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue和Element UI都是现代化的前端框架,各自拥有强大的API和功能。在Vue中,我们可以简单地使用v-for指令和props从服务器加载表格数据,并在页面上呈现出来。然后,我们可以使用v-on指令(或简化的@符号)来监听单元格的点击事件。当单元格被点击时,我们可以使用Element UI的Dialog组件来呈现一个弹框。 具体实现过程如下: 1. 首先,我们需要安装Vue和Element UI。你可以单独下载这两个框架,然后将它们引入你的项目中,或者你可以使用npm来安装它们: npm install vue npm install element-ui 2. 然后,我们需要从服务器加载表格数据。假设数据已经存储在组件的data属性中,并且我们使用了一个简单的表格模板: <table> <thead> <tr> <th>名称</th> <th>价格</th> <th>描述</th> </tr> </thead> <tbody> <tr v-for="(item, index) in items" :key="index"> <td>{{ item.name }}</td> <td>{{ item.price }}</td> <td>{{ item.description }}</td> </tr> </tbody> </table> 3. 接下来,我们需要监听单元格的点击事件。我们可以为每个单元格添加一个事件处理程序,并从事件对象中获取所点击的单元格的数据。为了简化代码并提高可维护性,我们可以将单元格的点击事件封装在一个自定义组件中: <template> <td @click="showDialog">{{ value }}</td> </template> <script> export default { props: ['value'], methods: { showDialog() { // 显示弹框 } } } </script> 4. 最后,我们需要使用Element UI的Dialog组件来创建一个弹框,用来显示所选中单元格的详细信息。我们可以在自定义组件的showDialog方法中使用Dialog组件来实现: <template> <td @click="showDialog">{{ value }}</td> </template> <script> export default { props: ['value'], methods: { showDialog() { this.$alert(this.value, '详细信息', { confirmButtonText: '确定' }) } } } </script> 在上面这个例子中,我们使用了Element UI的$alert方法来创建一个弹框,其中的文本内容就是我们所点击单元格的数据。Dialog组件的具体使用方法可以在官方文档中查看。 总结: 以上就是使用Vue和Element UI实现点击表格中单元格后弹出弹框的简单实现方法。通过这个例子,我们可以看到Vue和Element UI的强大功能和易用性。如果你还不熟悉这两个框架,那么现在就是时候开始学习它们了!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值