微信小程序微商城(四):动态API实现商品详情页(上)

编程学思 2018-06-13 15:26:42 ⋅ 826 阅读

上一篇:微信小程序微商城(三):电商首页福利专场无限下拉刷新动态API数据实现

看效果


开发计划

1、实现商品详情页面布局(这篇实现3个模块,头部商品图片轮播、商品价格和商品描述、商品详情展示)
2、根据用户点击不同的商品请求API动态加载数据

根据商品ID获取商品详情API数据模型

访问:https://100boot.cn/ 选择微商城案例,如下图所示:


下方还有详细的数据模型可以查看哦!

home.js 增加跳转商品详情事件

上一篇还记得我们做了商品点击查看详情的事件采集吗?那么再加上跳转商品详情页功能,如下图所示:



detail.wxml

<swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
  <block wx:for="{{goods.imgUrls}}">
    <swiper-item>
      <image src="{{item}}" src="{{item}}" bindtap="previewImage" mode="widthFix"></image>
    </swiper-item>
  </block></swiper><!--商品价格和商品描述--><view><view class="product-name-wrap">
    {{goods.title}}  </view>
  <view class="product-price-wrap">
      <view>
        <p class="product-price-new">¥{{goods.price}}</p>  
        <p class="product-price-old">原价¥{{goods.privilegePrice}}</p> 
      </view>
  </view></view>

 <view class="details"> 
  <scroll-view scroll-y="true">
    <text>商品详情</text>
    <block wx:for-items="{{goods.detailImg}}" wx:key="name">
       <image class="image_detail" src="{{item}}" mode="widthFix"/> 
    </block>
    <view class="temp"></view>
  </scroll-view>
 </view>   

detail.wxss

page {  
   display: flex;  
   flex-direction: column;  
   height: 100%; }
/* 直接设置swiper属性 */

swiper {  
   /* height: 500rpx; */    height: 750rpx; }
swiper-item image {  
   width: 100%;  
   height: 100%; }
/**商品价格**/
.product-price-wrap{      
   display: flex;  
   justify-content:space-between;/**两边对齐**/    flex-direction: row;  
   flex-wrap: wrap;  
   margin:5px 5px;   /* border:1rpx solid red;   */
}
.product-price-wrap .product-price-new{  
   color: red;  
   font-size: 40rpx;  
   margin: 10rpx; }
.product-price-wrap .product-price-old{  
   color: #888;  
   text-decoration: line-through;  
   padding-left: 5px;  
   font-size: 12px;  
   line-height:30px;  
   font-weight:300; }
.product-name-wrap{  
   margin: 0px 10px;    
   font-size: 14px;    
   color: #404040; }
.details{  
   padding: 0 5px 0 5px; }
.detail {  
   display: flex;  
   flex-direction: column;  
   margin-top: 15rpx;  
   margin-bottom: 0rpx;   }
.detail .title {  
   font-size: 40rpx;  
   margin: 10rpx;  
   color: black;  
   text-align: justify;  
   height: 100rpx; }
.detail .price {  
   color: red;  
   font-size: 40rpx;  
   margin: 10rpx; }
.line_flag {  
   width: 80rpx;  
   height: 1rpx;  
   display: inline-block;  
   margin: 20rpx auto;  
   background-color: gainsboro;  
   text-align: center; }
.line {  
   width: 100%;  
   height: 2rpx;  
   display: inline-block;  
   margin: 20rpx 0rpx;  
   background-color: gainsboro;  
   text-align: center; }
.detail-nav {  
   display: flex;  
   flex-direction: row;  
   align-items: center;  
   float: left;  
   background-color: #fff;  
   position: fixed;  
   bottom: 0;  
   right: 0;  
   z-index: 1;  
   width: 100%;  
   height: 100rpx; }
.button-green {  
   background-color: #4caf50; /* Green */
}
.button-red {  
   background-color: #f44336; /* 红色 */
}
.button-addCar {  
   background-color: #f44336; /* 红色 */    width: 100%; }
.image_detail {  
   width: 100%;  /* height: 750rpx; */
}
.detail-nav image {  
   width: 70rpx;  
   height: 50rpx;  
   margin: 20rpx 40rpx; }
.line_nav {  
   width: 5rpx;  
   height: 100%;  
   background-color: gainsboro; }
/* 占位 */
.temp {  
   height: 100rpx; }

detail.js

const ajax = require('../../utils/ajax.js');
const utils = require('../../utils/util.js');
var imgUrls = [];  var detailImg = [];
var goodsId = null;
var goods = null; Page({  /**   * 页面的初始数据   */  data: {    
   isLike: true,    
   showDialog: false,    
   goods:null,    
   indicatorDots: true, //是否显示面板指示点    autoplay: true, //是否自动切换    interval: 3000, //自动切换时间间隔,3s    duration: 1000, //  滑动动画时长1s  },  //预览图片  previewImage: function (e) {    
   var current = e.target.dataset.src;    wx.previewImage({      
       current: current, // 当前显示图片的http链接          urls: this.data.imgUrls // 需要预览的图片http链接列表      })  },  /**   * 生命周期函数--监听页面加载   */  onLoad: function (options) {    
   var that = this;    goodsId = options.goodsId;    
   console.log('goodsId:' + goodsId);    //加载商品详情    that.goodsInfoShow();  },  
goodsInfoShow: function (success) {    
   var that = this;    ajax.request({      
   method: 'GET',      
   url: 'goods/getGoodsInfo?key=' + utils.key+'&goodsId=' + goodsId,      
   success: data => {        
       var goodsItem = data.result;        
       for (var i = 0; i < goodsItem.shopGoodsImageList.length; i++) {            imgUrls[i] = goodsItem.shopGoodsImageList[i].imgUrl;          }        
       var details = goodsItem.details.split(";");        
       for (var j = 0; j < details.length; j++) {          detailImg[j] = details[j];        }        goods = {          
           imgUrls: imgUrls,          
           title: goodsItem.name,          
           price: goodsItem.price,          
           privilegePrice: goodsItem.privilegePrice,          
           detailImg: detailImg,          
           imgUrl: goodsItem.imgUrl,          
           buyRate: goodsItem.buyRate,          
           goodsId: goodsId,          
           count:1,          
           totalMoney: goodsItem.price,        }                that.setData({          
           goods : goods        })        
       console.log(goods.title)      }    })  }, })

备注

微信小程序微商城系列 都是通过https 动态获取数据并展示的,建议从第一篇开始阅读。大家多多支持本系列文章会继续更新下去,谢谢各位!

微信小程序微商城系列

微信小程序微商城:开发者key获取
微信小程序微商城(一):https框架搭建并实现导航功能
微信小程序微商城(二):电商首页轮播、分类导航和新品特卖实现
微信小程序微商城(三):电商首页福利专场无限下拉刷新动态API数据实现

关注我们

如果需要源码可以关注“IT实战联盟”公众号并留言(微商城源码,5个字会收到源码下载地址,一定要看源码里面的操作手册会少走很多弯路),也可以加入交流群和作者互撩哦~~~


全部评论: 0

    我有话说:

    程序商城(五):动态API实现商品详情(下)

    加入购物车悬浮框、商品数量、价格计算、收藏和加入购物车功能开发

    程序商城(七):动态API实现商品分类

    程序商品分类页面布局并且调用动态API获取数据并加载

    程序电商实战-商品详情

    先看一下今天要实现程序商品详情吧!

    程序商城(六):动态API实现新品特卖商品流式布局

    实现新品特卖商品列表布局、调用动态API获取数据并加载和点击商品跳转商品详情

    程序实现商品数量加减

    这是一个用程序原生代码实现的数量加减demo,主要是用于商品购物车或者商品详情修改数量使用

    程序商城(三):电商首福利专场无限下拉刷新动态API数据实现

    电商首第5个模块-福利专场,通过https调用API数据模型来实现无限下拉刷新......

    程序商城(八):缓存实现商品购物车功能

    商品详情商品信息放入缓存,购物车页面读取缓存获取商品信息,购物车商品计算和删除缓存商品

    程序电商实战-商品详情加入购物车(下)

    今天会接着一篇开始写商品详情加入购物车的部分,直接看效果......

    程序电商实战-首

    一篇:程序电商实战-入门篇 嗨,大家好!经过近两周的精心准备终于开始程序电商实战之路喽。那么最终会做成什么样呢?好了,不啰嗦了 我们先看首长什么样吧!   首效果图

    程序商城(九):授权并实现个人中心页面页面

    实现商城授权并获取用户信息和个人中心页面布局

    程序-Image的widthFix属性和rpm尺寸的使用

    在做程序商品详情商品详情是图片集合,渲染完成后发现图片加载的很不自然

    程序抖音实战-首

    你也可以用程序编写一个抖音

    程序电商实战-首(下)

    一篇:程序电商实战-首)好了,一期我们把首搜索、导航栏和广告轮播给做完了,那么接下来会继续

    程序实战篇:商品属性联动选择(案例)

    本期的程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点

    程序电商实战-商品列表流式布局

    今天给大家分享一下程序商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~

    程序商城(二):电商首轮播、分类导航和新品特卖实现

    本案例所有模块都为https动态调用API数据服务获得

    程序抖音实战-首(下)

    抖音程序动态数据获取

    程序商城(一):https框架搭建并实现导航功能

    本文将带领大家搭建https的程序框架,并实现动态获取数据展示效果!

    程序-template使用:实现购物车商品数量加减功能

    一篇我们实现了购物车功能,里面有用到template模板功能来实现购物车商品数量加减和价格计算功能......