对应本地生活案例:

https://www.bilibili.com/video/BV1834y1676P?p=52

HTML代码部分:

就是普通的wx-for指令遍历

<!--pages/classPage/classPage.wxml-->
<!-- <text>pages/classPage/classPage.wxml</text> -->
<!-- <text> id: {{query.id}} | 分类: {{query.name}} </text> -->
<view
class="item"
wx:for="{{list}}"
wx:key="id"
wx:for-index="idx"
wx:for-item="item"
>
<!-- 左边展示图片 -->
<view class="thumb">
<image src="{{item.images[0]}}"></image>
</view>
<!-- 右边展示文本 -->
<view class="content">
<text class="title">{{item.name}}</text>
<text>电话:{{tools.phoneNoHandle(item.phone)}}</text>
<text>地址:{{item.address}}</text>
<text>营业时间:{{item.businessHours}}</text>
</view>
</view> <!-- 导入wxs脚本 -->
<wxs src="../../utils/tools.wxs" module="tools"></wxs>

CSS样式代码:

/* pages/classPage/classPage.wxss */

/* 左右布局 */
.item {
display: flex;
justify-content: space-around; padding: 15rpx;
border: 1rpx solid #efefef;
border-radius: 8rpx;
margin: 15rpx; /* 盒子阴影 */
box-shadow: 1rpx 1rpx 15rpx #ddd;
} /* 图片控制 */
.thumb image {
width: 250rpx;
height: 250rpx;
display: block; margin-right: 15rpx;
border-radius: 8rpx;
}
/* 文本布局 */
.content {
display: flex;
flex-direction: column;
justify-content: space-around;
/* 字体拉小 */
font-size: 24rpx;
} .title {
font-weight: bolder;
}

JS代码部分:

1、完成接口请求初始化数据列表加载

2、配置上拉触底功能开启,在上拉加载的钩子函数中编写翻页请求,

  - 1、注意是叠加数据列表,而不是重置

  - 2、配置微信加载提示弹窗

3、如何判断翻到了最后一页,数据全部查完的状态

4、设置节流阀变量,控制请求加载的时候不能重复请求

5、配置下拉刷新功能开启

  - 1、重置翻页变量

  - 2、将停止下拉效果入参到请求方法中实现调用

// pages/classPage/classPage.js
Page({ /**
* 页面的初始数据
* 小程序的data 不能使用嵌套对象,this.setData方法会覆盖data属性
*/
data: {
query: {}, // 导航接参
list:[], // 列表容器
pageIndex: 1, // 翻页参数
pageSize: 10, // 每次请求10条数据
total: 0, // 总记录数 isLoading: false // 请求阀门
}, /**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
// 导航接参
this.setData({ query: options}) // 请求接口
this.getListData()
},
/**
* 获取每个具体分类的数据列表
* GET请求
* https://www.escook.cn/categories/:cate_id/shops
* _page 表示请求第几页的数据
* _limit 表示每页请求几条数据
*
*/
getListData(callBack) {
// 打开阀门
this.setData({ isLoading: true })
// 开启加载提示
wx.showLoading({ title: '数据加载中' }) // 请求数据
wx.request({
url: `https://www.escook.cn/categories/${this.data.query.id}/shops`,
method: 'GET',
data: {
_page: this.data.pageIndex,
_limit: this.data.pageSize
},
success: ( { data: res, header }) => {
console.log(res)
// 保存加载的数据
this.setData({
list: [
...this.data.list,
...res
],
total: parseInt(header['X-Total-Count']), // 内部对象不会保存起来
pageIndex: this.data.pageIndex,
pageSize: this.data.pageSize
}) console.log(this.data.total)
},
complete: () => {
// 关闭加载提示
wx.hideLoading()
// 关闭阀门
this.setData({ isLoading: false }) // 停止下拉刷新的操作也放在这里
// wx.stopPullDownRefresh()
callBack && callBack()
}
})
}, /**
* 生命周期函数--监听页面初次渲染完成
* 页面初次渲染完成时触发。
* 一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
* 注意:对界面内容进行设置的API如wx. setNavigationBarTitle,请在onReady之后进行。
*/
onReady() {
// 从onLoad函数加载到query参数后 改变导航标题
wx.setNavigationBarTitle({
title: this.data.query.name
})
}, /**
* 生命周期函数--监听页面显示
*/
onShow() { }, /**
* 生命周期函数--监听页面隐藏
*/
onHide() { }, /**
* 生命周期函数--监听页面卸载
*/
onUnload() { }, /**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
// 重置页数、总记录数、和容器
this.setData({
pageIndex: 1,
total: 0,
list: []
})
// 重新请求 并且请求完成停止刷新效果
this.getListData(() => {
wx.stopPullDownRefresh()
})
}, /**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
/**
* 判断翻页是否超过总数据
* 3.判断是否还有下一页数据,如果下面的公式成立,则证明没有下一页数据了:
* 页码值 * 每页显示多少条数据 >= 总数据条数
* page * pageSize >= total
*
*/
let pageCount =
this.data.pageIndex * this.data.pageSize
if (pageCount >= this.data.total) {
wx.showToast({
icon: 'none', // 不设置任何图标
title: '已经到底了', // 提示文本
duration: 3000, // 持续3秒
})
return
} // 根据阀门状态判断是否继续请求
if (this.data.isLoading) return
// 上拉加载翻一页
this.setData({ pageIndex: this.data.pageIndex + 1 })
this.getListData()
}, /**
* 用户点击右上角分享
*/
onShareAppMessage() { },
})

页面JSON配置:

{
"usingComponents": {},
"onReachBottomDistance": 200, "enablePullDownRefresh": true,
"backgroundColor": "#efefef",
"backgroundTextStyle": "dark"
}

  

WXS模块:

将电话号码加入横杠分隔符的方法

13888888888 -> 138-8888-8888

// utils/tools.wxs
/**
* 手机号处理
* @param {} phone
*/
function phoneNoHandle(phone) {
if (11 !== phone.length) return phone
var arr = phone.split('') // 插入减号
arr.splice(3, 0, '-')
arr.splice(8, 0, '-')
return arr.join('')
} /**
* 导出wxs模块
*/
module.exports = {
phoneNoHandle: phoneNoHandle
}

  

【微信小程序】 列表查询功能的更多相关文章

  1. 微信小程序-列表渲染多层嵌套循环

    微信小程序-列表渲染多层嵌套循环 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for= ...

  2. 微信小程序调用蓝牙功能控制车位锁

    第一次学用微信小程序,项目需要,被逼着研究了一下,功能是调用微信小程序的蓝牙功能,连接上智能车位锁,控制升降,大概步骤及调用的小程序接口API如下: 1.打开蓝牙模块 wx.openBluetooth ...

  3. 微信小程序实战 购物车功能

    代码地址如下:http://www.demodashi.com/demo/12400.html 一.准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.com/ ...

  4. 微信小程序在线支付功能使用总结

    最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出 ...

  5. 微信小程序开发-蓝牙功能开发

    0. 前言 这两天刚好了解了一下微信小程序的蓝牙功能.主要用于配网功能.发现微信的小程序蓝牙API已经封装的很好了.编程起来很方便.什么蓝牙知识都不懂的情况下,不到两天就晚上数据的收发了,剩下的就是数 ...

  6. 获取微信小程序列表渲染 index

    微信小程序列表渲染 index(索引值)通过 wx:for-index="index" 来获取: <view class="item" wx:for=&q ...

  7. 微信小程序--火车票查询

    微信小程序--火车票查询 写在最前面 微信小程序自九月份推出内测资格以来,经历了舆论热潮到现在看似冷清,但并不意味着大家不那么关注或者不关注了.我想不管是否有内测资格,只要是感兴趣的开发者已经进入潜心 ...

  8. 微信小程序火车票查询 直取12306数据

    最终效果图: 样式丑哭了,我毕竟不是前端,宗旨就是练练手,体验微信小程序的开发,以最直接的方式获取12306数据查询火车票. 目录结构: search1是出发站列表,search2是目的站列表,命名没 ...

  9. 微信小程序之购物车功能

    前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...

  10. [转]微信小程序之购物车功能

    本文转自:https://www.cnblogs.com/linxin/p/6834206.html 前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法 ...

随机推荐

  1. vue单个插槽

    当子组件模板只有一个没有属性的插槽时,父组件传入的整个内容片段将插入到插槽所在的 DOM 位置,并替换掉插槽标签本身. # 子组件 <div> <h2>我是子组件的标题< ...

  2. kettle从入门到精通 第五十一课 ETL之kettle Avro input

    1.我们在学习nifi的过程中有接触到Avro schema,当时我在想kettle应该也支持Avro,果不其然kettle也是支持Avro文件的读和写的.今天我们一起来学习下kettle中如何使用A ...

  3. VMware搭建集群环境

    集群地址分配 名称 IP 子网掩码 网关 DNS flink01 192.168.22.211 255.255.255.0 192.168.22.2 114.114.114.114 flink02 1 ...

  4. 让Easysearch运行在Kylin V10 (Lance)-aarch64上

    简介 本文主要介绍在国产操作系统 Kylin V10 (Lance)-aarch64 上安装单机版 Easysearch/Console/Agent/Gateway/Loadgen 系统配置 在安装之 ...

  5. DBEAVER 23.0.2 调整SQL编辑器字体大小 ver:20240112

    DBEAVER 23.0.2 调整SQL编辑器字体大小 ver:20240112 版本是:23.0.2. 菜单-窗口-首选项.用户界面-外观-颜色和字体.展开 DBeaver Font."M ...

  6. WIndow Server 2019 服务器 MinIO下载并IIS配置反向代理

    1.官网下载并配置 下载MinIO Serve地址(不需要安装,放在目录就行) https://dl.min.io/server/minio/release/windows-amd64/minio.e ...

  7. CSS 属性计算

    CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢? 有的同学可能会讲,CSS属性我倒是知道,例如: p{ color : red; } 上面的 CSS 代码中,p 是元素选择器,color ...

  8. 关于 Jupyter Nbconvert 自定义 LaTeX 模板,中文兼容与格式设置,从 Notebook 构建 LaTeX PDF 文档

    目录 为什么会有这篇随笔的内容? 简述一下我遇到的问题 Nbconvert 转换 .ipynb 文件的基本方法 Jupyter Nbconvert 构建中文 \(\LaTeX\) 文档的痛点 Jupy ...

  9. python logging日志没有写入到指定文件,写到其他项目的日志文件

    背景: 项目A为主框架项目,使用到了项目B的方法 项目A.B均有封装好的日志方法,且均在封装好的日志文件里面,增加了logger = MyLogger().info,其他文件要使用日志时,引入logg ...

  10. hive第一课:# hive-3.1.2分布式搭建文档

    hive-3.1.2分布式搭建文档 谷歌浏览器下载网址:Google Chrome – Download the fast, secure browser from Google 华为云镜像站:htt ...