【微信小程序】 列表查询功能
对应本地生活案例:
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 的用法 ...
随机推荐
- openstack考试需要的部署操作
openstack操作大全 一,keystone 用户 1.创建用户 openstack user create --password 密码 --email邮箱 --domain 域名 用户名字 2. ...
- nmcli 报错
首先检查你的网卡设备有没有连接,看一下是不是进主机模式 nmcli connection modify ens32 ipv4.addresses 192.168.10.10/24 因为原本就存在网卡配 ...
- Excel相关技巧
(1)如何实现EXCEL某个单元格满足条件整行变色? 链接:https://jingyan.baidu.com/article/75ab0bcba47c19d6864db2cf.html (2)获取表 ...
- kettle从入门到精通 第四十九课 ETL之kettle 自定义插件01
1.kettle插件是什么 kettle本身有足够多的转换或者job步骤,但是依然不能覆盖所有的业务场景,所以Kettle 自定义插件在有些独特的业务场景可以大显身手. Kettle的插件架构使得我们 ...
- flutter 创建第一个项目(二)
新建flutter project 项目 这样就创建出了第一个项目
- Vue 打包相关
Vue 打包相关 vue-cli-service build# 用法:vue-cli-service build [options] [entry|pattern] 选项: --mode 指定环境模式 ...
- Imdeploy笔记
Smiling & Weeping ---- 天气不好的时候,我会小心地把自己心上的裂缝补起来.为什么?... LMDeploy 的量化和部署 1 环境配置 2 服务部署 2.1 模型转换 2 ...
- 如何使用 Dump 文件?
引言 本文概述了使用 WinDbg 的一些必要步骤. 准备工作 第一步,你必须更改系统的配置使其能够生成 PDB 文件,包括 Release 版本.近期的 Visual C++ 编译器默认启用此配置, ...
- Blender练习——SciFi枪械.md
Blender练习--SciFi枪械 一.基本操作 常用快捷键 E 挤出 B 倒角,中途可通过滚轮或S来调整细分 Alt+点选 循环选择 Ctrl Alt+点选 并排选择 F 补面,比如一个碗口,将碗 ...
- 修改Oracle数据表空间存储位置
查看数据文件的存储路径: SQL> select name from v$datafile; NAME --------------------------------------------- ...