商品小程序(6.商品详情)

目录

本章主要完成商品详情页面的前端编写:主要页面为分包下的goods-detail页面

一、获取商品详情数据

还是先来看看后端api端口的url,以及参数,返回数据样式


请求数据前面写个很多次了,不多赘述

复制代码
<script>
	export default {
		data() {
			return {
				goods_info: {}
			};
		},
		onLoad(options) {
			const goods_id = options.goods_id
			this.getGoodsDetail(goods_id)
		},
		methods: {
			getGoodsDetail(goods_id){
				const {data : res} = await uni.request({
					url: 'https://api-hmugo-web.itheima.net/api/public/v1/goods/detail?goods_id=' + goods_id,
					method: 'GET'
				})
				if(res.meta.status !== 200){
					return uni.showToast({
						title: '数据请求失败!',
						duration: 1500,
						icon: 'none',
					})
				}
				this.goods_info = res.message
			}
		}
	}
</script>

二、渲染商品详情页的UI结构

1、渲染轮播图区域

前面轮播图也是做过了,具体的一些组件中的参数也不多介绍,直接使用,鼠标悬停上去也有翻译

根据返回结果,主要变量结构中的pics 下的 pics_big大图

复制代码
	<view>
		<!-- 轮播图区域 -->
		<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true">
			<swiper-item v-for="(item, i) in goods_info.pics" :key="i">
				<image :src="item.pics_big"></image>
			</swiper-item>
		</swiper>
	</view>

渲染UI结构

复制代码
<style lang="scss">
swiper {
	height: 750rpx;
	
	image {
		width:100%;
		height:100%;
	}
}
</style>

2、实现轮播图预览效果

为轮播图中的image图片绑定click事件处理函数

在methods中定义preview事件处理函数用于点击预览大图(用uni自带的previewImage浏览图片)

复制代码
			preview(i) {
				uni.previewImage({
					current: i,
					urls: this.goods_info.pics.map(x => x.pics_big)
				})
			}

点击商品轮播图图片进入预览图

3、渲染商品信息区域

在与轮播图同级的view下创建商品信息的UIview

复制代码
		<!-- 商品信息区域 -->
		<view class="goods-info-box">
			<!-- 商品价格 -->
			<view class="price">¥{{goods_info.goods_price}}</view>
			<!-- 商品信息主体区域 -->
			<view class="goods-info-body">
				<!-- 商品的名字 -->
				<view class="goods-name">{{goods_info.goods_name}}</view>
				<!-- 收藏 -->
				<view class="favi">
					<uni-icons type="star" size="18" color="gray"></uni-icons>
					<text>收藏</text>
				</view>
			</view>
			<!-- 运费 -->
			<view class="yf">快递: 免运费</view>
		</view>

美化UI

复制代码
.goods-info-box {
	padding: 10px;
	padding-right: 0;
	
	.price {
		color: #C00000;
		font-size: 18px;
		margin: 10px 0;
	}
	.goods-info-body {
		display: flex;
		justify-content: space-between;
		
		.goods-name{
			font-size: 13px;
			margin-right: 10px;
		}
		
		.favi{
			width: 120px;
			font-size: 12px;
			display: flex;
			flex-direction: column;
			align-items: center;
			justify-content: center;
			border-left: 1px solid #efefef;
			color: gray;
		}
	}
	.yf{
		font-size: 12px;
		color: gray;
		margin: 10px 0;
	}
}

4、渲染商品详情信息

在页面结构中,使用rich-text组件,将带有html标签的内容渲染为小程序的页面结构(轮播图,商品详情的同级)

复制代码
		<!-- 商品详情信息 -->
		<rich-text :node="goods_info.goods_introduce"></rich-text>

修改getGoodsDetail方法,从而解决图片底部空白间隙的问题

解决.webp格式图片在ios设备无法正常显示问题

5、解决商品价格闪烁的问题

三、渲染详情页底部的商品导航区域

1、渲染商品导航区域的UI结构

基于uni-ui提供的goodsnav组件来实现商品导航区域的效果

在data中,通过options和buttongroup两个数组,来声明商品导航组件的按钮配置对象:

复制代码
		data() {
			return {
				goods_info: {},
				// 左侧按钮组的配置对象
				options: [{
					icon: 'shop',
					text: '店铺'
				}, {
					icon: 'cart',
					text: '购物车',
					info: 2
				}],
				// 右侧按钮组的配置对象
				buttonGroup: [{
					text: '加入购物车',
					backgroundColor: '#ff0000',
					color: '#fff'
				}, {
					text: '立即购买',
					backgroundColor: '#ffa200',
					color: '#fff'					
				}]
			};
		},

使用uni-goods-nav商品导航组件

复制代码
		<!-- 商品导航组件区域 -->
		<view class="goods_nav">
			<uni-goods-nav :fill="true"  :options="options" :buttonGroup="buttonGroup"  @click="onClick" @buttonClick="buttonClick" />
		</view>

美化商品导航,并使他固定在底部

复制代码
.goods_nav {
	position: fixed;
	bottom: 0;
	left: 0;
	width: 100%;
}

2、点击跳转到购物车页面

点击左下角购物车按钮,跳转购物车页面

相关推荐
玖釉-4 分钟前
解决PowerShell执行策略导致的npm脚本无法运行问题
前端·npm·node.js
zd20057213 分钟前
AI辅助数据分析和学习了没?
人工智能·学习
Larcher38 分钟前
新手也能学会,100行代码玩AI LOGO
前端·llm·html
洛白白39 分钟前
“职场心态与心穷
经验分享·学习·生活·学习方法
徐子颐1 小时前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭1 小时前
如何理解HTML语义化
前端·html
jump6801 小时前
url输入到网页展示会发生什么?
前端
诸葛韩信1 小时前
我们需要了解的Web Workers
前端
brzhang2 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
游戏开发爱好者82 小时前
iOS 上架要求全解析,App Store 审核标准、开发者准备事项与开心上架(Appuploader)跨平台免 Mac 实战指南
android·macos·ios·小程序·uni-app·iphone·webview