【微信小程序】 列表查询功能
对应本地生活案例:
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
}
【微信小程序】 列表查询功能的更多相关文章
- 微信小程序-列表渲染多层嵌套循环
微信小程序-列表渲染多层嵌套循环 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for= ...
- 微信小程序调用蓝牙功能控制车位锁
第一次学用微信小程序,项目需要,被逼着研究了一下,功能是调用微信小程序的蓝牙功能,连接上智能车位锁,控制升降,大概步骤及调用的小程序接口API如下: 1.打开蓝牙模块 wx.openBluetooth ...
- 微信小程序实战 购物车功能
代码地址如下:http://www.demodashi.com/demo/12400.html 一.准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.com/ ...
- 微信小程序在线支付功能使用总结
最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出 ...
- 微信小程序开发-蓝牙功能开发
0. 前言 这两天刚好了解了一下微信小程序的蓝牙功能.主要用于配网功能.发现微信的小程序蓝牙API已经封装的很好了.编程起来很方便.什么蓝牙知识都不懂的情况下,不到两天就晚上数据的收发了,剩下的就是数 ...
- 获取微信小程序列表渲染 index
微信小程序列表渲染 index(索引值)通过 wx:for-index="index" 来获取: <view class="item" wx:for=&q ...
- 微信小程序--火车票查询
微信小程序--火车票查询 写在最前面 微信小程序自九月份推出内测资格以来,经历了舆论热潮到现在看似冷清,但并不意味着大家不那么关注或者不关注了.我想不管是否有内测资格,只要是感兴趣的开发者已经进入潜心 ...
- 微信小程序火车票查询 直取12306数据
最终效果图: 样式丑哭了,我毕竟不是前端,宗旨就是练练手,体验微信小程序的开发,以最直接的方式获取12306数据查询火车票. 目录结构: search1是出发站列表,search2是目的站列表,命名没 ...
- 微信小程序之购物车功能
前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...
- [转]微信小程序之购物车功能
本文转自:https://www.cnblogs.com/linxin/p/6834206.html 前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法 ...
随机推荐
- LeetCode 40. Combination Sum II 组合总和 II (C++/Java)
题目: Given a collection of candidate numbers (candidates) and a target number (target), find all uniq ...
- 剑指Offer-65.矩阵中的路径(C++/Java)
题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的 ...
- The solution of P3012
problem & blog 很明显是个 DP. 于是我们定义 \(dp_{i,j,k}\) 为末尾的字符的 ASCII 码为 \(i\),有 \(j\) 个大写字母,\(k\) 个小写字母. ...
- 别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time
据说有些云厂商会超卖,宿主有 96 个核心,结果卖出去 100 多个 vCPU,如果这些虚机负载都不高,大家相安无事,如果这些虚机同时运行一些高负载的任务,相互之间就会抢占 CPU,对应用程序有较大影 ...
- 手把手教你搭建Docker私有仓库Harbor
1.什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库.Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访 ...
- 讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣
文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好100次,如果要购买的话最低要购买1 ...
- 写的程序总是出 BUG,只好请佛祖前来镇楼啦
前言 自己之前写着玩的,在这做个备份,感觉不错的取走即可. 南无阿弥陀佛 佛祖镇楼,BUG 消失,永不怠机. ///////////////////////////////////////////// ...
- 集成学习与随机森林(二)Bagging与Pasting
Bagging 与Pasting 我们之前提到过,其中一个获取一组不同分类器的方法是使用完全不同的训练算法.另一个方法是为每个预测器使用同样的训练算法,但是在训练集的不同的随机子集上进行训练.在数据抽 ...
- ZYNQ Linux使用SPI驱动
--- title: ZYNQ Linux使用SPI驱动 EntryName: xilinx-zynq-using-spi-driver-in-linux date: 2020-10-14 10:02 ...
- nginx 添加 模块
--- title: nginx 添加 模块 date: 2019-10-31 11:21:46 categories: tags: - config - nginx --- 说明: 已经安装好的Ng ...