js开发12 鸿蒙的列表分页加载数据 原创

noutsider
发布于 2021-2-2 11:04
浏览
1收藏

       各位看官久等了,最近家里事情较多,没能及时更新.今天继续. 之前再介绍鸿蒙远程加载网络数据的时候,我说过不仅要注重用户的体验度,同时也要兼顾服务器或者页面性能的最大化.今天介绍鸿蒙的列表分页加载数据.分页加载数据无论是在PC端还是移动端应用都很广泛.

分页加载的好处如下:

(1)无论是本地数据还是网络数据,分页加载都会减轻前端加载负荷,提升页面的执行性能,带来良好的用户体验

例如,有100条数据等待加载,但是第10条数据就是用户所需要的信息,若是100条数据一下全部加载出来,后面加载的90条就是做的无用功.还会造成页面卡顿的现象,体验度大大减低.

(2)若是从网络端加载数据,可以减轻服务器的传输压力.

 

具体代码如下:(关键部分已经标注)

js业务逻辑层:

export default {
    data: {
        title: 'World',
        listitem3:[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],
        //当前页数
        currentnum:1,
        fixnum:5,
        //分页的数据结果集
        pagelist:[],
        text:"加载更多", //默认
        flag:false
    },
    //页面初始化
    onInit(){
           this.showData(this.currentnum)
    },
    loadview(){
               //加载后面十条
         ++this.currentnum;                   //当前页码加1后传递给showData
        //调用分页
        this.showData(this.currentnum);
    },
    showData(curnum){
        //用三元运算符判断一下数据页数是否到底 到底后显示 我是有底线的
         let pagesize=this.listitem3.length%this.fixnum==0?this.listitem3.length/this.fixnum:Math.floor(this.listitem3.length/this.fixnum)+1

        if(curnum>pagesize){
            this.text="我是有底线的";
            this.flag=true;

        }
        else{    
            this.pagelist=this.listitem3.slice(0,curnum*this.fixnum);
        }
    }
}

 

视图渲染层:

<div class="container">
    <div class="topview">
    </div>
    <div class="contentview">
        <list class="list">
            <block for="{{pagelist}}">
                <list-item class="listitem">
                    <text class="txt1">{{$item}} </text>
                </list-item>
            </block>
            <list-item>
                <div class="{{flag?'lastview1':'lastview'}}" disabled="{{flag}}" onclick="loadview">
                    <text class="txt2">{{text}}</text>
                </div>
            </list-item>
        </list>
    </div>
    <div class="bottomview">
    </div>
</div>

 

 

css属性设置:

.container {
    width: 100%;
    height: 1500px;
    display: flex;
    flex-direction: column;
}
.topview{
    width: 100%;
    height: 10%;
    background-color: orange;
    position: fixed;
    left: 0px;
    top: 0px;
    
}
.bottomview{
    width: 100%;
    height: 10%;
    background-color: orange;
    position: fixed;
    left: 0px;
    bottom: 0px;
}
.list{
    width: 100%;
    height: 100%;
}
.contentview{
    width: 100%;
    height: 90%;
}
.listitem{
    width: 100%;
    height: 15%;
    border-bottom:3px solid  slategray;
    display: flex;
    justify-content: center;
    align-items: center;
}
.txt1{
    font-weight: bold;
    font-size: 45px;
    font-weight: bold;
}
.lastview{
    width: 100%;
    height: 20%;
    background-color: skyblue;
    display: flex;
    justify-content: center;
    align-items: center;
}
.lastview1{
    width: 100%;
    height: 20%;
    background-color: grey ;
    display: flex;
    justify-content: center;
    align-items: center;
}
.txt2{
    font-weight: bold;
    font-size: 45px;
    font-weight: bold;
    color: white;
}

 

 

效果图如下:

js开发12 鸿蒙的列表分页加载数据-鸿蒙开发者社区

js开发12 鸿蒙的列表分页加载数据-鸿蒙开发者社区

 

欢迎读者朋友订阅我的专栏:[HarmonyOS开发从0到1]

https://harmonyos.51cto.com/column/35

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-2-9 18:44:45修改
1
收藏 1
回复
举报
5条回复
按时间正序
/
按时间倒序
Whyalone
Whyalone

分页加载应该是弱性能设备必须要采用的加载方式,而且在深度开发中,代码性能的考量会贯穿整个开发过程。

JS足够优雅,但是不够高效。

回复
2021-2-2 11:22:33
六合李欣
六合李欣

可以结合前端缓存,更好的提升页面程序的执行性能

回复
2021-2-2 13:31:32
noutsider
noutsider 回复了 Whyalone
分页加载应该是弱性能设备必须要采用的加载方式,而且在深度开发中,代码性能的考量会贯穿整个开发过程。 JS足够优雅,但是不够高效。

谢谢指教

回复
2021-2-2 21:24:55
wx5fc1f00e14985
wx5fc1f00e14985

 <block for="{{pagelist}}"> <list-item class="listitem"> <text class="txt1">{{$item}} </text> </list-item> </block>

这段代码我这边一直报错,,就是编译失败,但是一直找不到原因,是我少导入了什么包吗?

回复
2021-5-20 19:05:18
wx5fc1f00e14985
wx5fc1f00e14985 回复了 wx5fc1f00e14985
{{$item}} 这段代码我这边一直报错,,就是编译失败,但是一直找不到原因,是我少导入了什么包吗?

就是for=这里,没办法使用for,css和js里边照抄楼主的源代码

回复
2021-5-20 19:05:57
回复
    相关推荐