微信小程序 “万利商城”实战之十一: 商品列表页跳转到详细页的实现

时间:2024-03-05 22:21:53

商品列表页点击商品图片时可以查看商品详情,我们先在pages/index这个文件夹下增加一个page,

名称叫productDetail, 建好后index文件夹下的文件结构是这样的:

然后我们修改index.wxml这个文件, 在<image>这个控件上加上tap事件,代码如下 :

1   <view>
2     <image class="image1" src="{{item.imageUrl}}" 
3     data-productId="{{item.productId}}" bindtap="tapDetail"></image>
4   </view>

bindtap="tapDetail"是点击图片时要执行的函数,
data-productId="{{item.productId}}" 是传递给函数的参数,参数名称为productId
在index.wxml文件加上事件代码就可以了,如下:
1   tapDetail: function (options) { 
2     let productId = options.currentTarget.dataset.productid;
3  
4     wx.navigateTo({
5       url: \'../index/productDetail?productid=\'+ productId,
6     })
7   },

这个函数很简单, 先用let productId = options.currentTarget.dataset.productId;获取页面传递过来的productId ,

然后调用小程序提供的页面跳转函数 wx.navigateTo(), 传入页面名称和参数就可以了。

接下来我们完善productDetail.wxml这个页面。

1 <view class="container"> 
2   <image class="image1" src="{{product.imageUrl}}"></image>
3   <text>{{product.productName}}</text>
4   <text>{{product.price}}</text>
5   <text>{{product.originalPrice}}</text>
6 </view>

productDetail.js中的代码如下 :

 1   data: {
 2     product:{}  //定义一个对象用于传值到productDetail.wxml页面, 用来显示商品信息
 3   },
 4 
 5   initProduct:function(productId)
 6   {
 7     console.log("productId:"+productId); //调试打印语句
 8     var _this=this;
 9     wx.request({ //调用API从服务器上获取当前product信息
10       url: \'http://www.tm.com/webapi/product\',
11       data:{\'productId\':productId},
12       method:\'GET\',
13       success:function(res){
14         //var productObj=res.data;
15         var productObj={
16 \'productId\':111,\'productName\':\'女装T恤简洁11\',\'price\':12.9,\'originalPrice\':22.9,\'imageUrl\':\'../../images/product11.jpg\', 17 \'inShoppingCart\':0,\'productQty\':11}; 18 19 _this.setData({product:productObj}); //从服务器上获取的productObj值通过setData()函数设置到页面上显示出来。 20 } 21 }) 22 }, 23 24 25 /** 26 * 生命周期函数--监听页面加载 27 */ 28 onLoad: function (options) { 29 let productId = options.productid; //接收上一个页面传递过来的参数 30 console.log(productId); //打印输出,调试用。 31 this.initProduct(productId); 调用函数用来初始化产品信息。 32 },