小程序入门10:小程序云开发之获取单个数据的详情

236 阅读2分钟

写在前面

本篇文章是微信小程序开发入门的第十篇,介绍小程序云开发之获取单个数据的详情

获取单个数据的详情

我们想要实现点击首页的某一个水果,页面就跳转到该水果的详情页面

首先在miniprogram\pages\index\index.wxml文件中添加代码,bindtap监听手指落下事件,手指落下后触发onFruitItem方法,并且通过data-item="{{item}}"给方法传参:

<view class="fruit_ul">
  <view class="furit_li" wx:for="{{fruitList}}" wx:key="index" bindtap="onFruitItem" data-item="{{item}}">
    ...
  </view>
</view>

onFruitItem方法的代码写在miniprogram\pages\index\index.js中,通过e.currentTarget.dataset获取传入的参数item,并且通过wx.navigateTo()方法跳转到详情页,同时将当前水果的id传过去,可以在官方文档-路由中查看更多关于路由跳转的内容

Page({
  ...
  onFruitItem(e) {
    const item = e.currentTarget.dataset.item
    wx.navigateTo({
      url: `/pages/fruit-detail/fruit-detail?id=${item._id}`,
    })
  }
});

我们的项目中还没有详情页:/pages/fruit-detail/fruit-detail,我们现在创建,打开miniprogram\app.json文件,添加如下代码后,pages文件夹下就自动创建了fruit-detail文件夹:

{
  "pages": [
    "pages/index/index",
    "pages/fruit-detail/fruit-detail"
  ],
  ...
}

此时我们尝试点击首页上的某个水果,发现已经可以成功跳转到详情页,我们现在想要跳转到详情页面后,页面立马获取点击的水果的详情信息,所以我们编写一个云函数用来获取单个数据的详情,打cloudfunctions\fruit\index.js文件,添加代码如下:

const add = require('./add/index');
const search = require('./search/index');
const detail = require('./detail/index');

// 云函数入口函数
exports.main = async (event, context) => {
  switch (event.type) {
    case 'add':
      return await add.main(event, context);
    case 'search':
      return await search.main(event, context);
    case 'detail':
      return await detail.main(event, context);
  }
}

同时新建cloudfunctions\fruit\detail\index.js文件,编写代码如下,保存后将云函数上传并部署一下,重启后就可以在小程序端正常访问了:

const cloud = require('wx-server-sdk');

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

const db = cloud.database();

// 创建集合云函数入口函数
exports.main = async (event, context) => {
  try {
    // 数据库在fruit集合中查询id为event.id的数据
    const data = await db.collection('fruit').doc(event.id).get()
    return {
      success: true,
      data: data,
      msg: '查询成功!'
    }
  } catch (e) {
    return {
      success: false,
      msg: '查询失败!'
    };
  }
};

我们现在打开miniprogram\pages\fruit-detail\fruit-detail.js文件,通过onLoad方法的options参数接受列表页面传过来的字段id,作为参数传给上面写的云函数,代码如下:

Page({
  data: {
  },
  onLoad(options) {
    wx.cloud.callFunction({
        // 云函数名称
        name: 'fruit',
        // 传给云函数的参数
        data: {
          type: 'detail',
          id: options.id,
        },
      })
      .then(res => {
        console.log('res', res)
      })
      .catch(err => {})
  },
})

res结果如下,成功拿到了刚刚点击的水果的详情信息:

image.png

写在最后

以上就是小程序云开发之获取单个数据的详情的全部内容