(14条消息) 微信小程序

前提:

类似一个商城界面,从云数据库拉取信息展示,用户点击某一个商品后,实现从数据库查询该商品的id,实现跳转。

商城界面展示 (mall)

详情界面展示 (re-datail)

数据库:

基本思路:

mall:
1.查询数据表所有商品的信息,放到商城界面 mall.wxml的 imgList 数组里
2.在商城界面 mall.wxml 上通过wx-for渲染imgList数组,显示需要的数据,通过data-*为商品dataset id
3.在跳转函数中获取通过dataset的id,作为跳转参数

re-detail:
1.接收传过来的id参数
2.通过id查询数据表中该id下的商品信息
3.wxml展示

代码实现

mall.js:
一步一步来:

 Page({
data: {
    imgList:[],///定一个接受数据的数组
  },
  onLoad: function (options) {  // 页面初始化 options为页面跳转所带来的参数
    let that=this //异步请求,所以let一个that

    wx.cloud.database().collection("prize").get({ ///查询prize数据表中的数据(所有商品)
      success(res){
        that.setData({ //通过setData,将res中的数据存入到imgList数组当中
          imgList:res.data
        }),
        console.log(res.data)   ///打印看一下
      }
    })
})

mall.wxml:

<block wx:for="{{imgList}}">//渲染这个数组
<view class="goods" catchtap="onDetail" data-bzId="{{item._id}}">
<view class="limit">
<image src="{{item.prizeLink}}" mode="aspectFit" style="width:100%;height:100%"></image>
</view>
<text class="good-txt">{{item.prizeName}}</text>//显示商品名称
<text class="good-price">{{item.prizePrice}}金币</text>//显示商品价钱
</view>
</block>
<!-- 展示结束 -->

item就是小程序默认的前缀,后面的名字是你数组中拿到的属性值的名字

接下来 传参跳转。
mall.wxml:

<view class="goods" catchtap="onDetail" data-bzId="{{item._id}}">

绑定一个onDetail方法,使用data-属性名来绑定该商品的id给bzId

关于data- 官方文档给的解释很明白

我的理解就是绑定上一个参数

mall.js:

onDetail: function (e) {
    console.log(e)
  }

我们先来打印一下这个e

有这么多的属性 我们重点是这一条:

currentTarget中的dataset里已经有一条我们绑定好的bzid,并且你点击不同的商品,它的bzid都是不同的,是唯一的。

关于currentTarget:

关于dataset:

所以我们var一个变量来接收id

onDetail: function (e) {
    console.log(e)
    var imgId = e.currentTarget.dataset.bzid;
     console.log("this id is " + imgId)
  }

打印看一下:

imgId成功拿到值。

现在通过navigateTo跳转页面

onDetail: function (e) {
    console.log(e)
    var imgId = e.currentTarget.dataset.bzid;
    console.log("this id is " + imgId)
    wx.navigateTo({
      url: "../rewards-detail/re-detail?id=" + imgId   //?id连字符加上imgId
    });
  }

现在是这个样子了。 mall页面配置完毕了

re-detail页面:
js:

onLoad: function (e) {
    //指定id来加载对应数据
    console.log(e)
}

还是老样子 先打印一下e

id已经拿到了

在Page下的data中设置三个数组

 data: {
    imgDetail:[],//全部信息
    prizeLink:[],//商品图片链接,是数据表中的一个字段
    prizePrice:[]商品价格,是数据表中的一个字段
  },
 onLoad: function (e) {
    //指定id来加载对应数据
    console.log(e)
    let that=this//同样的 异步请求,let一个that
    let a=e.id//声明一个a,存e中的id
    // 页面初始化 options为页面跳转所带来的参数
    wx.cloud.database().collection("prize").where({ //查询数据表prize下id为a所存放的id的信息
      _id:a
    }).get({
      success(res){
       // console.log(res)
        that.setData({ //给数据写入数据
          imgDetail:res.data,
          prizeLink:res.data[0].prizeLink,
          prizePrice:res.data[0].prizePrice
        })
      }
    })
  }

wxml:

<view class="goods">
<text class="good-txt">{{prizeType}}</text>
<view class="limit">
<image src="{{prizeLink}}" mode="heightFix" style="width:100%;height:100%"></image>
</view>
  <view  class="buy" bindtap="buy"><text class="buy-txt">{{prizePrice}}金币</text></view>
</view>

配置完毕。效果如下:

(0)

相关推荐