微信小程序学习实录2(下拉刷新、下拉加载更多、小程序事件、PHP后端代码、刷新无数据解决方案)

简介: 微信小程序学习实录2(下拉刷新、下拉加载更多、小程序事件、PHP后端代码、刷新无数据解决方案)

一、全局配置

1.启用lazyCodeLoading

lazyCodeLoading基础库 2.11.1 及以上版本支持,2.11.1 以下兼容但无优化效果

通常情况下,在小程序启动期间,所有页面及自定义组件的代码都会进行注入,当前页面没有使用到的自定义组件和页面在注入后其实并没有被使用。自基础库版本 2.11.1 起,小程序支持有选择地注入必要的代码,以降低小程序的启动时间和运行时内存。

{
  "lazyCodeLoading": "requiredComponents"
}

2.启用enablePullDownRefresh

enablePullDownRefresh的调用,需配置对应的.json。在实际开发中,不是每个页面都需要下拉刷新的,因此可以只针对本页面进行配置。

案例项目结构

  • lists.js
  • lists.json
  • lists.wxml
  • lists.wxss



lists.json配置如下:

{
    "usingComponents": {},
    "navigationBarTitleText": "用户列表",
    "enablePullDownRefresh": true,
    "onReachBottomDistance": 50
}


二、设置全局变量

const util = require('../../utils/util.js')
let page = 1


配置util,引入外部js文件,便于后续开发的统一管理,业务域名、地图key等多次小勇的信息。如: url: util.host + 'data/api/api.php?act=getUsers&token=3cab7ce4142608c0f40c785b5ab5ca24&page=1';

let page = 1,首次进入页面即调用的数据信息,具体见下文;


三、页面初始化数据

页面的初始数据,当下来刷新收,返回函数赋值,在渲染层展示。

    /**
     * 页面的初始数据
     */
    data: {
        userData: []
    },


四、当前页面进入执行下拉刷新

如不设置该步骤,首次进入页面是空白的,需要下拉刷新下,方可展示数据。

   onLoad(options) {
        //进入页面,执行下拉刷新
        wx.startPullDownRefresh()
    },


五、监听用户下拉动作

  • 要实时隐藏导航栏加载框和停止下拉动作,否则,页面将出现无法操作的情况;
  • 调试时,建议增加fail错误提示;
/**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {
        // 显示顶部刷新图标
        wx.showNavigationBarLoading();
        const that = this;
        wx.request({
            url: util.host + 'data/api/api.php?act=getUsers&token=3cab7ce4142608c0f40c785b5ab5ca24&page=1',
            method: "GET",
            success: function (res) {
                //console.log(res.data.data)
                that.setData({
                    userData: res.data.data
                });
                // 隐藏导航栏加载框
                wx.hideNavigationBarLoading();
                // 停止下拉动作
                wx.stopPullDownRefresh();
            },
            fail: function (err) {
                console.log(err)
            }
        })
    },


六、页面上拉触底事件的处理函数

  • 数组拼接函数的使用: userData: oldData.concat(res.data.data)
  • 每次下拉刷新,增加页码:page = page + 1
/**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {
        var that = this;
        // 显示加载图标
        wx.showLoading({
            title: '玩命加载中',
        })
        // 页数+1
        page = page + 1
        wx.request({
            url: util.host + 'data/api/api.php?act=getUsers&token=3cab7ce4142608c0f40c785b5ab5ca24&page=' + page,
            method: "GET",
            success: function (res) {
                //console.log(res.data.data)
                // 回调函数
                const oldData = that.data.userData;
                //console.log(oldData)
                that.setData({
                    userData: oldData.concat(res.data.data)
                })
                // 隐藏加载框
                wx.hideLoading();
            }
        })
    },


七、PHP后端对接API

在实际开发中,增加获取总记录,$row_c = $db->queryall($sql_c);便于在前端进行比较,渲染层底部进行判断做个性化提醒说明(没有数据了)。

 /*02.获取信息列表*/
    public function getUsers()
    {
        global $db, $res;
        dbc();
        @$p = $_GET['page'] == "" ? 1 : $_GET['page'];//获取用户选择的页码
        @$pagesize = $_GET['limit'] == "" ? 7 : $_GET['limit'];//获取用户选择的每页显示多少条数据
        @$limit = ($p - 1) * $pagesize;//偏移量
        //获取数据;
        $sql = "select user_id,user_name,user_title,user_phone,FROM_UNIXTIME(user_time) AS user_time from " . $db->table('user') . " WHERE 1";
        $sql .= " ORDER BY user_id DESC LIMIT " . $limit . "," . $pagesize;
        $row = $db->queryall($sql);
        //获取总记录;
        $sql_c = "select user_id from " . $db->table('user') . " WHERE 1";
        $sql_c .= " ORDER BY user_id DESC";
        $row_c = $db->queryall($sql_c);
        $res['code'] = 0;
        $res['count'] = count($row_c);
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


八、常见问题

1.不显示下拉加载…

一般应该是背景颜色被覆盖导致,修改app.json中的"window"配置即可。

    "window": {
        "backgroundTextStyle": "dark",
        "navigationBarTitleText": "Lockdatav",
        "navigationBarTextStyle": "black",
        "navigationBarBackgroundColor": "#EDEDED",
        "backgroundColor": "#EDEDED"
    },


2.下拉不刷新数据

onPullDownRefresh函数自己每个页面默认的封装函数,无需自建。如果下来无刷新,查看是否在lists.js写了两次,函数覆盖导致的。

onPullDownRefresh: function () {
//自己的code
}
onPullDownRefresh: function () {}


@漏刻有时

相关文章
|
20天前
|
定位技术 开发工具 Python
代码让微信开屏地球转起来
这段内容介绍了如何使用Python制作一个动态旋转的地球图像,类似于微信启动画面中的地球。文章详细描述了所需准备的三个素材(地球表面、云图和微信地球的抠图),并解释了通过调整云层和地面的旋转速度来实现自然的相对运动效果的基本原理。文中还提供了一个GIF压缩工具的链接,以及部分代码示例。此外,文章最后提到了一些Python学习资源,包括学习路线、开发工具、视频教程、实战案例、练习题和面试资料。
26 0
ly~
|
1天前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
19 6
|
2天前
|
JSON 数据格式
Blob格式转json格式,拿到后端返回的json数据
文章介绍了如何将后端返回的Blob格式数据转换为JSON格式,并处理文件下载和错误提示。
7 0
Blob格式转json格式,拿到后端返回的json数据
|
19天前
|
小程序 JavaScript Go
代码总有一个是你想要的分享63个微信小程序源
分享63个微信小程序源代码,包括电商系统、同城拼车、博客等多种应用,涵盖C#、Node.js、Golang等技术栈。每个项目附带源码和示例,适合初学者和开发者参考学习。提取码:8888,代码效果参考:http://www.603393.com/sitemap.xml。
30 2
|
1天前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
1月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
1月前
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
1月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
1月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
1月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。