小程序 - 美食列表

小程序交互练习 - 美食列表小程序开发笔记

目录

美食列表

功能描述

准备工作

创建项目

配置页面

配置导航栏

启动本地服务器

页面初始数据

设置获取美食数据

设置onload函数

设置项目配置

页面渲染

页面样式

处理电话格式

创建处理电话格式脚本

页面引入脚本

页面使用脚本

实现上拉触底

实现下拉刷新

完成版脚本

功能截图

总结


美食列表

“美食列表”微信小程序是一个展示美食名称、美食图片及美食商家的电话、地址和营业时间等信息的微信小程序。下面将对“美食列表”微信小程序进行详细讲解。

功能描述

美食列表包含多条美食信息,每条美食信息左侧为美食图片,右侧为美食详细信息,包括美食名称、电话、地址和营业时间。该页面具有上拉触底加载数据和下拉刷新两个功能,即当用户上拉美食列表页时,如果页面即将到达底部,会自动加载更多数据;当用户下拉页面时,如果到达顶部后进行下拉操作,可以刷新页面。

准备工作

创建项目

使用测试号,不使用模版。如下图:

 

配置页面

项目创建完成后,在app.json文件中配置一个shoplist页面,

具体代码如下:

{"pages": ["pages/shoplist/shoplist"]......
}

项目结构截图:

配置导航栏

在pages/shoplist/shoplist.json文件中配置页面导航栏,

具体代码如下:

{"usingComponents": {},"navigationBarTitleText": "美食"
}

上述代码将导航栏标题设置为“美食”。

启动本地服务器

本地服务器为nginx,主要为返回相应数据。

需要准备十张美食图片放置在同级目录下的images文件夹中。

返回数据及格式如下:

<?php
$page = isset($_GET['page']) && !empty($_GET['page']) ? intval($_GET['page']) : 1;
$pageSize = isset($_GET['pageSize']) && !empty($_GET['pageSize']) ? intval($_GET['pageSize']) : 5;
$res = [['id' => 1,'name' => '簋街小龙虾','phone' => '131111111111','image' => 'http://localhost/shoplist/images/1.jpg','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 2,'name' => '胡大饭馆','phone' => '13122222222','image' => 'http://localhost/shoplist/images/2.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 3,'name' => '地摊美食','phone' => '13133333333','image' => 'http://localhost/shoplist/images/3.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 4,'name' => '秋梨饭馆','phone' => '13144444444','image' => 'http://localhost/shoplist/images/4.jpg','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 5,'name' => '米村拌饭','phone' => '13155555555','image' => 'http://localhost/shoplist/images/5.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 6,'name' => '红烧肉','phone' => '13166666666','image' => 'http://localhost/shoplist/images/6.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 7,'name' => '豆汁','phone' => '13177777777','image' => 'http://localhost/shoplist/images/7.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 8,'name' => '三更美龄粥','phone' => '13188888888','image' => 'http://localhost/shoplist/images/8.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 9,'name' => '簋街大龙虾','phone' => '13199999999','image' => 'http://localhost/shoplist/images/9.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],['id' => 10,'name' => '江南小馆','phone' => '13100000000','image' => 'http://localhost/shoplist/images/10.webp','address' => '北京市昌平区','businessHours' => '周一至周日9:00-21:00'],
];
echo json_encode($res);

页面初始数据

在pages/shoplist/shoplist.js文件,设置页面初始化变量名称和变量值,具体代码如下:

data: {data: {shopList: [], // 保存美食列表信息page: 1, // 默认请求第1页的数据pageSize: 10, // 默认每页请求5条数据total: 0, // 数据总数,默认为0},page: 1,pageSize: 10,scrollTop: 0,scrollHeight: 0},

 

设置获取美食数据

在pages/shoplist/shoplist.js文件,设置获取美食数据的函数,

在其中请求后端服务器数据并赋值系统变量。

具体代码如下:

getShopList: function () {// 请求数据之前,展示加载效果,接口调用结束后,停止加载效果wx.showLoading({title: '数据加载中...'})wx.request({url: 'http://127.0.0.1/shoplist/index.php',method: 'GET',data: {page: this.page,pageSize: this.pageSize},success: res => {console.log(res.data)this.setData({shopList: res.data,})this.total = res.header['X-Total-Count'] - 0},complete: () => {// 隐藏加载效果wx.hideLoading()}})},

设置onload函数

编写onLoad()生命周期函数,实现页面加载完成时调用getShopList()函数,

具体代码如下:

onLoad(options) {this.getShopList()},

 

设置项目配置

在微信开发者工具的本地设置中勾选“不校验合法域名、web-view(业务域名)​、TLS版本以及HTTPS证书”复选框。保存代码并运行程序,控制台中输出的美食列表信息。

页面渲染

前面的步骤已经实现了当页面加载完成时获取美食列表数据,并将数据保存到了shopList数组中。接下来可以通过列表渲染将shopList数组中的数据渲染到页面上。在pages/shoplist/shoplist.wxml文件中进行页面渲染,具体代码如下:

<!--pages/shoplist/shoplist.wxml-->
<wxs src="../../utils/tools.wxs" module="tools"></wxs>
<navigation-bar title="美食" back="{{false}}"></navigation-bar>
<view class="shop-item" wx:for="{{ shopList }}" wx:key="id"><view class="thumb"><image src="{{ item.image }}" /></view><view class="info"><text class="shop-title">{{ item.name }}</text><text>电话:{{ tools.splitPhone(item.phone) }}</text><text>地址:{{ item.address }}</text><text>营业时间:{{ item.businessHours }}</text></view>
</view>

页面样式

在pages/shoplist/shoplist.wxss文件中进行页面样式美化,具体代码如下:

/* pages/shoplist/shoplist.wxss */
.container {margin:0;padding:0;
}.shop-item {margin-left:5vw;margin-bottom:2vh;display: flex;
}.thumb {display:flex;flex-direction:row;
}.thumb image{width:30vw;height: 15vh;border-radius: 2%;border: 6rpx solid #777F92;
}.info {display: flex;flex-direction:column;margin-left:2vw;
}.info .shop-title {font-size: 40rpx;font-weight: bold;
}.info text{display: flex;flex-wrap:wrap;margin: 10rpx 10rpx 10rpx 10rpx;
}

处理电话格式

美食列表”微信小程序中的每一项为一家美食商家的信息,其中包含美食商家的电话。该电话是从服务器端返回的,不适合直接显示在页面上,需要对电话进行处理之后显示在页面上。例如,将“12345678901”转换成“123-4567-8901”​,以便于阅读。下面将通过WXS来实现电话格式的处理,具体实现步骤如下:

创建处理电话格式脚本

在项目根目录下创建utils文件夹,将处理电话函数封装到utils/tools.wxs文件中,

具体代码如下:

function splitPhone(str) {if (str.length !== 11) {return str}var arr = str.split('')arr.splice(3, 0, '-')arr.splice(8, 0, '-')return arr.join('')}module.exports = {splitPhone: splitPhone}

页面引入脚本

在pages/shoplist/shoplist.wxml文件中引入WXS脚本,具体代码如下:

<wxs src="../../utils/tools.wxs" module="tools"></wxs>

页面使用脚本

在pages/shoplist/shoplist.wxml文件中修改电话的代码,将电话经过处理之后再输出,

具体代码如下:

<text>电话:{{ tools.splitPhone(item.phone) }}</text>

 

实现上拉触底

上拉触底就是用户在进行上拉操作时,当页面即将到达底部时加载下一页数据,

具体实现步骤如下。

①在pages/shoplist/shoplist.json文件中配置上拉触底的距离为200px,

具体代码如下:

{...原有代码"onReachBottomDistance": 200
}

②在页面上拉触底事件处理函数onReachBottom()中,让页码自增,

并调用getShopList()方法请求下一页的数据,

具体代码如下:

onReachBottom() {console.log('上拉了')// 页码自增++this.data.page// 请求下一页数据this.getShopList()},

实现下拉刷新

当用户进行下拉操作时,如果到达了顶部,再进行下拉,可以刷新页面。接下来在页面中实现下拉刷新的效果,具体步骤如下。

①在pages/shoplist/shoplist.json文件中开启下拉刷新并配置相关样式,

具体代码如下:

{...原有代码"enablePullDownRefresh": true,"backgroundColor": "#efefef","backgroundTextStyle": "dark"
}

②通过onPullDownRefresh()函数监听用户下拉动作,

实现用户进行下拉操作时重置数据,并重新发起网络请求,具体代码如下:

onPullDownRefresh() {// 需要重置的数据this.setData({shopList: []})this.page = 1this.total = 0// 重新发起数据请求this.getShopList()},

完成版脚本

最终完成版的pages/shoplist/shoplist.js文件内容。

具体代码如下:

// pages/shoplist/shoplist.js
Page({isLoading: false, // 当前是否正在加载数据/*** 页面的初始数据*/data: {data: {shopList: [], // 保存美食列表信息page: 1, // 默认请求第1页的数据pageSize: 10, // 默认每页请求5条数据total: 0, // 数据总数,默认为0},page: 1,pageSize: 10,scrollTop: 0,scrollHeight: 0},getShopList: function (cb) {// 请求数据之前,展示加载效果,接口调用结束后,停止加载效果this.isLoading = truewx.showLoading({title: '数据加载中...'})wx.request({url: 'http://127.0.0.1/shoplist/index.php',method: 'GET',data: {page: this.data.page,pageSize: this.data.pageSize},success: res => {//console.log(res.data)this.setData({shopList: res.data,})this.total = res.header['X-Total-Count'] - 0},complete: () => {// 隐藏加载效果wx.hideLoading()// 阻止重复加载数据this.isLoading = falsecb && cb()}})},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getShopList()// 页面初始化 options为页面跳转所带来的参数var that = this;wx.getSystemInfo({success: function (res) {that.setData({windowHeight: res.windowHeight,windowWidth: res.windowWidth})}});}, // 定位数据scroll: function (event) {var that = this;that.setData({scrollTop: event.detail.scrollTop});},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {console.log('下拉了')// 需要重置的数据this.setData({shopList: []})this.data.page = 1this.data.total = 0// 重新发起数据请求this.getShopList(() => {wx.stopPullDownRefresh()})},/*** 页面上拉触底事件的处理函数*/onReachBottom() {console.log('上拉了')if (this.data.page * this.data.pageSize >= this.data.total) {// 没有下一页的数据了return wx.showToast({title: '数据加载完毕!',icon: 'none'})}if (this.isLoading) {return}// 页码自增++this.data.page// 请求下一页数据this.getShopList()},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

功能截图

总结

微信小程序-美食列表开发笔记,实现美食列表通过后台获取数据动态展示列表,

并可通过上拉和下拉进行更新列表操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486084.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ip所属地址是什么意思?怎么改ip地址归属地

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;不仅关乎设备间的通信&#xff0c;还涉及到用户的网络身份与位置信息。IP所属地址&#xff0c;即IP地址的归属地&#xff0c;通常反映了设备连接互联网时的地理位置。本文将深入解析IP所属地址的含义&#…

【opencv入门教程】12. 矩阵初始化

文章选自&#xff1a; 一、 数据类型 建立矩阵必须要指定矩阵存储的数据类型&#xff0c;图像处理中常用的几种数据类型如下&#xff1a;包括数据位深度8位、32位&#xff0c;数据类型U:uchar、F:float型以及通道数C1&#xff1a;单通道、C3&#xff1a;三通道、C4&#xff…

Hadoop生态圈框架部署 伪集群版(七)- Hive部署

文章目录 前言一、Hive部署&#xff08;手动部署&#xff09;1. 下载Hive2. 解压Hive安装包2.1 解压2.2 重命名2.3 解决冲突2.3.1 解决guava冲突2.3.2 解决SLF4J冲突 3. 配置Hive3.1 配置Hive环境变量3.2 修改 hive-site.xml 配置文件3.3 配置MySQL驱动包 4. 初始化MySQL上的存…

Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署

文章目录 前言一、Hbase伪分布式部署&#xff08;手动部署&#xff09;1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.jar…

家政项目小程序+ssm

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序家政项目小程序的开发全过程。通过分析微信小程序家政项目小程序管理的不足&#xff0c;创建了一个计算机管理微信小程序家政项目小程序的方案。文章…

qt QNetworkAccessManager详解

1、概述 QNetworkAccessManager是QtNetwork模块中的一个核心类&#xff0c;它允许应用程序发送网络请求并接收响应。该类是网络通信的基石&#xff0c;提供了一种方便的方式来处理常见的网络协议&#xff0c;如HTTP、HTTPS等。QNetworkAccessManager对象持有其发送的请求的通用…

五、docker的网络模式

五、docker的网络模式 5.1 Docker的四种网络模式 当你安装docker时&#xff0c;它会自动创建三个网络&#xff0c;可使用如下命令查看&#xff1a; [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 7390284b02d6 bridge bridge lo…

T113-S3 Tina 串口切换

前面介绍了如何在 Tina 中添加新的板子及切换存储类型&#xff0c;本节介绍如何修改板子串口配置。 1、修改调试串口 Tina 调试串口 配置在 device/config/chips/t113/configs/evbemmc/sys_config.fex 文件中&#xff0c;可以修改 uart_para 变量来指定调试串口。 ;--------…

【计算机网络】 —— 数据链路层(壹)

文章目录 前言 一、概述 1. 基本概念 2. 数据链路层的三个主要问题 二、封装成帧 1. 概念 2. 帧头、帧尾的作用 3. 透明传输 4. 提高效率 三、差错检测 1. 概念 2. 奇偶校验 3. 循环冗余校验CRC 1. 步骤 2. 生成多项式 3. 例题 4. 总结 四、可靠传输 1. 基本…

M005 PHP+MYSQL+web编程课程网站的设计与实现 源码 配置 文档

web编程课程网站 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着互联网的飞速发展&#xff0c;各行各业的信息化进程逐步加快。商业信息化、政务信息化、教育信息、服务信息化等等已遍布全国各地。信息化的服务平台能更加高效的为用户提供各种服务…

深入理解 PyTorch 自动微分机制与自定义 torch.autograd.Function

文章目录 前言一、pytorch使用现有的自动微分机制二、torch.autograd.Function中的ctx解读1、forward 方法中的 ctx2、backward 方法中的 ctx3、小结 三、pytorch自定义自动微分函数&#xff08;torch.autograd.Function&#xff09;1、torch.autograd.Function计算前向与后向传…

python怎么打印心形

首先按WinR调出运行界面&#xff0c;输入cmd打开命令行。 接着输入python命令进入python环境。 然后复制下面的代码进行粘贴&#xff1a; print(\n.join([.join([(baidu[(x-y) % len(baidu)] if ((x*0.05)**2(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 < 0else ) for x in r…

LabVIEW-简单串口助手

LabVIEW-简单串口助手 串口函数VISA配置串口VISA写入函数VISA读取函数VISA资源名称按名称解除捆绑 函数存放位置思维导图主体界面为以下 串口函数 VISA配置串口 VISA写入函数 VISA读取函数 VISA资源名称 按名称解除捆绑 函数存放位置 思维导图 主体界面为以下 从创建好的“枚举…

使用数据层进行数据生命周期管理

作者&#xff1a;来自 Elastic Stef Nestor Elasticsearch 7.10 使配置数据生命周期变得不再那么复杂。在这篇博文中&#xff0c;我将介绍一些变化、如何使用它们以及一些最佳实践。 数据生命周期可以包含很多阶段&#xff0c;因此我们将涉及&#xff1a; 将集群划分为层&…

IPv4路由典型配置-BGP

一、组网说明 三台设备运行BGP协议&#xff0c;SW 1属于AS 100&#xff0c;SW 2和SW 3属于AS 200。配置BGP协议&#xff0c;以保证三台设备之间可以互通。 二、组网图 三、配置步骤 SW 1的配置 #BGP部分 switch(config)#router bgp 100switch(config-router-bgp)#bgp …

【优选算法篇】:滑动窗口算法--开启高效解题的“窗口”,透过例题看奥秘

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 一.滑动窗口算法二.例题1.长度最小的子数组2.无重复字符的最长字串…

什么是甘特图?使用甘特图制定项目计划表的步骤

在项目管理中&#xff0c;项目计划是项目的核心要素&#xff0c;它详细记录了项目任务详情、责任人、时间规划以及所需资源。 这份计划不仅为项目推进提供指引&#xff0c;更是控制范围蔓延、争取更多支持的有力工具。 在项目管理中&#xff0c;项目计划是项目的核心要素&…

keil报错---connection refused due to device mismatch

解决办法如下&#xff1a; 记得改成1 把Enable取消

Mybaits的优点缺点?

大家好&#xff0c;我是锋哥。今天分享关于【Mybaits的优点&缺点?】面试题。希望对大家有帮助&#xff1b; Mybaits的优点&缺点? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 是一个优秀的持久层框架&#xff0c;通常用于 Java 应用程序中&…

后端-pageHelp分页查询

在pom.xml文件中先导入分页的坐标 PageResult里面有两个后端返回给前端的参数&#xff0c;我们最后把PageResult再封装到Result中&#xff0c; PageResult和Result都是工具类 EmployeeDTO中是前端页面中的模糊查询字段和分页的两个值 注意&#xff01; 括号中的参数Employee…