• Element UI - v-infinite-scroll无限滚动组件


    一、v-infinite-scroll无限滚动组件使用详解

     1、v-infinite-scroll="load" //load无限滚动加载的方法
     2、infinite-scroll-disabled //是否禁用无限滚动加载
     3、infinite-scroll-delay //节流时延,单位为ms
     4、infinite-scroll-distance //触发加载的距离阈值,单位为px
     5、infinite-scroll-immediate //是否立即执行加载方法,以防初始状态下内容无法撑满容器。
     //默认情况下,infinite-scroll-disabled是false,因此如果组件使用无限滚动加载组件,即使在vue不进行加载方法的调用,组件也会调用该方法,因此如果需要控制的话,尽量是使用infinite-scroll-disabled属性来进行加载方法是否调用的控制。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、组件无限加载原因及解决方式
    1、问题:使用无限加载的div没有设置高度导致无限加载
    解决方案:


    在指令使用的div一定要限定高度(height:xxx; overflow-y:auto)load加载方法将在拉取底部时才会被执行。
    2、问题:为什么在vue中并没有在任何生命周期中进行load方法的调用,直接就加载了方法?
    解决方案:使用 :infinite-scroll-disabled="isInfiniteScrollDisabled“属性来进行控制。
    3、代码demo演示

    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    //常量定义
    export const STATUS= {
      START: 0, // 上拉加载
      LOADING: 1, // 加载中
      NODATA: 2, // 没有更多数据
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三、总结
    当然,这个组件还有很多可以优化的地方,比如:可以将下面这一段代码抽成公共组件,使用该组件的地方,只需要传当前的pullStatus状态即可。

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    同时,也可以封装成一个mixins,这样同一个项目,如果多处需要滚动分页,那么这样代码就会更加简洁和方便,下面我粘贴一下mixins里面的代码:

    /** 
     * 页面无限滚动加载
    */
    export default  {
        name: "infiniteScrollMixins",
        data() {
            return {
                pullStatus: this.$enum.STATUS.START,
                pageIndex: 1,
                pageSize: 20,
            }
        },
        computed:  {},
        created() {},
        methods: {
            loadMoreData() {
                if (this.pullStatus !=  this.$enum.STATUS.START) {
                    return;
                }
                this.pullStatus = this.$enum.STATUS.LOADING;
                if(this.getLoadMoreData) {
                //使用该mixins的组件需要定义该方法
                    this.getLoadMoreData();
                }
            },
    
            setPullStatus(data = []) {
                if (data.length < this.pageSize ) {
                    this.pullStatus = this.$enum.STATUS.NODATA;
                } else {
                    this.pageIndex++;
                    this.pullStatus = this.$enum.STATUS.START;
                }
            }
        },
        beforeDestroy() {},
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    如何使用封装的mixins?
    1、导入: import 名称 from ‘路径’;
    2、声明: mixins: [mixins名称],
    3、此时mixins中定义的data/methods/computed等,在该组件中都可以直接使用,且多个使用mixins的组件的各个变量是相互独立的,值的修改在组件中不会相互影响。(此处不理解可以去学习一下mixins的相关文档)

  • 相关阅读:
    3.5 Option
    JAVA设计模式--创建型模式--抽象工厂模式
    ES6中set的基础、map数据结构和DOM classList的基础用法
    md编辑器常用语法模板
    青岛大学数据结构与算法——第6章
    【Happy!1024】C++智能指针
    大气颗粒物PMF源解析实践技术应用
    【查找算法】——二分查找
    2022年CCF推荐国际学术会议和期刊(人工智能领域)
    开源:分享4个非常经典的CMS开源项目
  • 原文地址:https://blog.csdn.net/Subuprogrammer/article/details/126348736