当前位置: 首页 > news >正文

微信小程序入门学习教程,从入门到精通,项目实战:美妆商城小程序 —— 知识点详解与案例代码 (18)

项目实战:美妆商城小程序 —— 知识点详解与案例代码

本章围绕“美妆商城小程序”项目,系统讲解微信小程序开发的核心知识点。以下将从项目结构、页面开发、组件使用、API 调用、数据绑定、路由跳转、表单处理、本地存储等多个维度,结合具体案例代码进行详细说明。


一、项目创建与文件结构

知识点:小程序项目结构

微信小程序项目结构如下:

美妆商城/
├── app.js          // 小程序逻辑
├── app.json        // 小程序全局配置
├── app.wxss        // 全局样式
├── project.config.json // 项目配置
├── sitemap.json    // 页面索引配置
├── pages/          // 页面目录
│   ├── index/      // 首页
│   ├── goodsList/  // 商品列表页
│   ├── goodsDetail/ // 商品详情页
│   ├── order/      // 订单信息页
│   ├── address/    // 收货地址页
│   └── orderResult/ // 订单结果页
└── utils/          // 工具函数

案例:app.json 配置示例

// app.json
{"pages": ["pages/index/index","pages/goodsList/goodsList","pages/goodsDetail/goodsDetail","pages/order/order","pages/address/address","pages/orderResult/orderResult"],"window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": "#ff6f91","navigationBarTitleText": "美妆商城","navigationBarTextStyle": "white"},"sitemapLocation": "sitemap.json"
}

说明

  • pages 数组定义页面路径,第一项为首页。
  • window 配置全局导航栏样式。
  • 页面路径必须在 pages 中注册,否则无法访问。

二、首页开发(index)

知识点1:WXML 数据绑定与列表渲染

语法说明:
  • 使用 {{}} 进行数据绑定。
  • 使用 wx:for 渲染列表,wx:key 优化性能。
案例代码:首页轮播图 + 商品推荐
<!-- pages/index/index.wxml -->
<view class="container"><!-- 轮播图 --><swiper autoplay="true" interval="3000" duration="500" indicator-dots="true"><block wx:for="{{banners}}" wx:key="id"><swiper-item><image src="{{item.url}}" mode="aspectFill" class="banner-img" /></swiper-item></block></swiper><!-- 推荐商品 --><view class="goods-list"><view class="goods-item" wx:for="{{recommendGoods}}" wx:key="id" bindtap="goToDetail" data-id="{{item.id}}"><image src="{{item.image}}" class="goods-img" /><text class="goods-name">{{item.name}}</text><text class="goods-price">¥{{item.price}}</text></view></view>
</view>
// pages/index/index.js
Page({data: {banners: [{ id: 1, url: 'https://example.com/banner1.jpg' },{ id: 2, url: 'https://example.com/banner2.jpg' }],recommendGoods: [{ id: 101, name: '口红', price: 129, image: 'https://example.com/lipstick.jpg' },{ id: 102, name: '粉底液', price: 258, image: 'https://example.com/foundation.jpg' }]},goToDetail(e) {const id = e.currentTarget.dataset.id;wx.navigateTo({url: `/pages/goodsDetail/goodsDetail?id=${id}`});}
});
/* pages/index/index.wxss */
.banner-img {width: 100%;height: 300rpx;
}
.goods-list {display: flex;flex-wrap: wrap;padding: 20rpx;
}
.goods-item {width: 48%;margin: 1%;background: #fff;border-radius: 10rpx;padding: 10rpx;box-sizing: border-box;
}
.goods-img {width: 100%;height: 200rpx;border-radius: 8rpx;
}
.goods-name {display: block;font-size: 28rpx;margin-top: 10rpx;
}
.goods-price {color: #ff6f91;font-weight: bold;
}

关键点

  • bindtap 绑定点击事件。
  • data-id 传递商品 ID。
  • wx.navigateTo 跳转页面并传参。

三、商品详情页(goodsDetail)

知识点2:页面传参与 onLoad 接收参数

案例代码:
// pages/goodsDetail/goodsDetail.js
Page({data: {goods: null},onLoad(options) {const id = options.id; // 从 URL 获取参数// 模拟从数据库或 API 获取商品数据const mockGoods = {101: { id: 101, name: '口红', price: 129, image: 'https://example.com/lipstick.jpg', desc: '持久显色' },102: { id: 102, name: '粉底液', price: 258, image: 'https://example.com/foundation.jpg', desc: '轻薄遮瑕' }};this.setData({goods: mockGoods[id] || {}});},addToCart() {wx.showToast({ title: '已加入购物车', icon: 'success' });},buyNow() {wx.navigateTo({ url: '/pages/order/order' });}
});
<!-- goodsDetail.wxml -->
<view class="detail-container" wx:if="{{goods}}"><image src="{{goods.image}}" class="detail-img" /><view class="detail-info"><text class="name">{{goods.name}}</text><text class="price">¥{{goods.price}}</text><text class="desc">{{goods.desc}}</text><button bindtap="addToCart">加入购物车</button><button type="primary" bindtap="buyNow">立即购买</button></view>
</view>

说明

  • onLoad 是页面加载时的生命周期函数,options 包含 URL 参数。
  • 使用 wx:if 控制内容是否渲染。

四、收货地址页(address)

知识点3:表单处理与本地存储(wx.setStorageSync)

案例:地址表单提交并保存到本地
<!-- address.wxml -->
<form bindsubmit="formSubmit"><view class="form-item"><input name="name" placeholder="收货人" value="{{formData.name}}" bindinput="onInput" /></view><view class="form-item"><input name="phone" placeholder="手机号" value="{{formData.phone}}" bindinput="onInput" /></view><view class="form-item"><input name="address" placeholder="详细地址" value="{{formData.address}}" bindinput="onInput" /></view><button form-type="submit" type="primary">保存地址</button>
</form>
// address.js
Page({data: {formData: {name: '',phone: '',address: ''}},onInput(e) {const { name, value } = e.detail;this.setData({[`formData.${name}`]: value});},formSubmit() {const { formData } = this.data;// 简单校验if (!formData.name || !formData.phone || !formData.address) {wx.showToast({ title: '请填写完整信息', icon: 'none' });return;}try {wx.setStorageSync('shippingAddress', formData);wx.showToast({ title: '地址保存成功' });wx.navigateBack(); // 返回上一页} catch (e) {console.error('保存失败', e);}},onLoad() {// 页面加载时读取已保存的地址const saved = wx.getStorageSync('shippingAddress') || {};this.setData({ formData: saved });}
});

关键点

  • 使用 bindinput 动态更新表单数据。
  • wx.setStorageSync 同步保存数据到本地。
  • wx.getStorageSync 读取本地数据。

五、订单结果页(orderResult)

知识点4:页面间数据传递(通过全局变量或缓存)

案例:显示订单成功信息
// app.js
App({globalData: {lastOrder: null}
});
// order.js(下单后)
const app = getApp();
Page({confirmOrder() {const order = {id: Date.now(),time: new Date().toLocaleString(),amount: 258};app.globalData.lastOrder = order;wx.navigateTo({ url: '/pages/orderResult/orderResult' });}
});
// orderResult.js
const app = getApp();
Page({data: {order: null},onLoad() {this.setData({ order: app.globalData.lastOrder });}
});
<!-- orderResult.wxml -->
<view class="result"><text class="success">✓ 订单提交成功!</text><text>订单号:{{order.id}}</text><text>金额:¥{{order.amount}}</text><text>时间:{{order.time}}</text><button bindtap="goHome">返回首页</button>
</view>
// orderResult.js 补充
goHome() {wx.reLaunch({ url: '/pages/index/index' }); // 重定向到首页,清空栈
}

六、综合性案例:完整购物流程模拟

场景:用户从首页 → 商品详情 → 下单 → 填写地址 → 订单成功

关键流程代码整合:
  1. 首页点击商品 → 跳转详情页(传 id)
  2. 详情页点击“立即购买” → 跳转订单页
  3. 订单页点击“提交订单” → 检查地址,若无则跳转地址页
  4. 地址页保存后返回 → 自动提交订单
  5. 跳转订单结果页
订单页逻辑(pages/order/order.js):
Page({data: {address: null,goods: { name: '口红', price: 129 }},onLoad() {const addr = wx.getStorageSync('shippingAddress');this.setData({ address: addr });},submitOrder() {if (!this.data.address) {wx.navigateTo({ url: '/pages/address/address?from=order' });return;}// 模拟下单const app = getApp();app.globalData.lastOrder = {id: Date.now(),goods: this.data.goods,address: this.data.address,amount: this.data.goods.price};wx.navigateTo({ url: '/pages/orderResult/orderResult' });}
});

增强功能:可在 address 页面的 onUnloadonShow 中检测是否来自订单页,自动返回并提交。


七、本章核心知识点总结

知识点说明对应 API/语法
页面配置app.json 定义页面路径和窗口样式pages, window
数据绑定WXML 中动态显示数据{{variable}}
列表渲染循环渲染商品、轮播图等wx:for, wx:key
事件处理点击、输入等交互bindtap, bindinput
页面跳转导航到其他页面wx.navigateTo, wx.redirectTo, wx.reLaunch
页面传参URL 传参与 onLoad 接收?id=101, options.id
表单处理input 输入与 submit 提交<form>, bindsubmit
本地存储保存用户地址、购物车等wx.setStorageSync, wx.getStorageSync
全局数据跨页面共享数据getApp().globalData

八、扩展建议

  • 使用 wx.request 接入真实后端 API。
  • 引入 vant-weapp 组件库提升 UI。
  • 使用 云开发 实现无后端数据库存储。
  • 添加购物车功能(使用数组 + 本地存储)。

通过以上知识点与案例,可完整构建一个功能健全的美妆商城小程序,覆盖用户浏览、下单、地址管理、订单展示等核心流程。

http://www.dtcms.com/a/482949.html

相关文章:

  • 微信小程序添加水印功能
  • 02_ES索引规范kibana
  • 购物网站建设模板图片价格低的跑车
  • LeetCode hot100:049 字母异位词分组:两种解法的深度解析
  • 网站建设业务前景政务信息网站建设制度
  • 使用C#写微信小程序后端——电商微信小程序
  • C++——vector容器、动态容器
  • C++ 类与对象(下篇)笔记整理
  • 重庆建站服务商漳浦网站开发
  • 深入浅出理解电感:从理论到实践的电路“惯性”元件
  • 分布式事务:基于MQ事务的解决方案详解
  • 无信息先验:贝叶斯分析中的客观基准
  • 公司官网备案流程mysql优化 wordpress
  • 网站建设员课程注册网页版
  • 瑞莎星瑞(Radxa Orion O6) 基于 Android OS 使用 NPU的图片模糊查找APP 开发
  • 户外商品网站制作长沙网站建设的公司
  • 安卓13_ROM修改定制化-----ROM解打包 修改 讲解 导读篇
  • 网站设计亮点望野亭
  • RTC时钟原理
  • STM32运行原理深度解析:从软件到硬件的神奇之旅
  • OpenCV(十一):色彩空间转换
  • 广州安全教育平台网宁波网站seo哪家好
  • 家装网站自己做的平面设计常用网站
  • Three.js轨道控制器完全指南(OrbitControls与TrackballControls)
  • 服务器数据恢复—硬盘黄灯预警,RAID5阵列数据如何恢复?
  • CATIA 转换为 3DXML 全流程:迪威模型网在线转换和本地方转换方法指南
  • 学校门户网站建设的意义做任务分享赚钱的网站
  • 网站个人中心wordpress怎么做手机网站
  • 杂记 15
  • Video Understanding Baseline via papers