小程序基础语法

本文介绍了小程序的基础语法,包括数据绑定、事件处理和条件渲染。接着详细讲解了如何使用云数据库进行数据的插入、更新、查找和删除操作,并探讨了云函数的创建和使用,特别是批量删除数据的功能。此外,还阐述了云存储的使用,包括上传和获取图片。整个教程结合实例,帮助开发者全面理解小程序的开发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识的一些碎碎念...

数据绑定在.js的data里,用{{变量}}进行绑定

普通标签:<view>

图片标签:<image src=" ">

循环:wx:for

判断:wx:if

是否渲染可以使用wx:if和hidden。

区别:hidden不会将wxml内的元素删去,wx:if会。所以需要频繁切换的场景适合hidden,一次性渲染的场景适合wx:if。

添加事件:bind

事件的冒泡:当子元素发生事件时,事件会逐层向父元素进行传播。

阻止事件冒泡!使用catch代替bind进行事件绑定。

如何找到自定义的属性?为属性添加data-id标识。然后再事件对象中找到他!

事件对象:当组件绑定事件被触发时,向绑定的函数发送一个对象。

如何使用云数据库?

先在云开发控制台里创建新的集合,这里以user为例。

插入数据: 

我们用设置一个事件函数的方法来测试。这里在button上绑定一个insert方法来向数据库中插入数据

<button bindtap="insert">插入</button>

然后再.js中定义这个函数。用wx.cloud.database()方法新建一个数据库对象。

用db.collection()方法获取数据库中的集合,用add()方法向集合中添加新的数据。

const db = wx.cloud.database()
Page:({
    //...
  insert: function () {
    db.collection('user').add({
      data: {
        name: 'Faker',
        age: 23
      },
      success: (res) => {
        console.log(res)
      },
      fail: (err) => {
        console.log(err)
      }
    })
  },
    //...
})

这样就可以在数据库中插入"name:Faker age:23",:)

使用collection,add来插入。同时利用回调函数返回正确/错误的信息。

这时候,在云开发控制台的user里就可以看到我们得数据啦

当然,用Promise来写也是可以的。就是那个.then .catch之类的东西。

更新数据

我们来展示如何更新数据。

接上条,我们使用doc方法更新数据库中的数据。参数为每条数据的id值。

注意这里用Promise来写。

  update: function () {
    db.collection('user').doc('4c86bd845fa7f435001377816ec04bb8').update({
      data: {
        age: 20
      }
    }).then((res) => {
      console.log(res)
    }).catch((err) => {
      console.log(err)
    })
  },

同样是创建一个button绑定该事件函数来测试。刷新数据库,李哥重回20岁了哦。

查找数据

和上面类似,查找数据使用where()方法,获取数据使用get()方法。具体使用方法如下。

  search: function () {
    db.collection('user').where({
      name: 'Faker'
    }).get().then((res) => {
      console.log(res)
    }).catch((err) => {
      console.log(err)
    })
  },

这样,我们成功找到了李哥。

在查找的时候,我们引入了一个新问题:数据库的权限问题。

在云开发控制台的“数据权限”,可以控制数据库的权限设置。

我们以一个简单的例子说明。

我们在云开发中“添加记录”手动建立一个Bang的数据。

 

我们可以注意到,手动建立的Bang这条数据是没有openid属性的。这是因为当前数据库的控制权限为“仅创建者可读写”,数据库会识别当前用户的openid属性,不满足当前openid属性的数据,在查询时会自动屏蔽。

如下,我们查询Bang时,不会返回任何值。

在我们将数据库权限修改为“所有用户可读”后,Bang可以被查到了。

 删除数据

和上面类似。就不多赘述了。

通过doc查找元素,然后用remove方法。 

  delete: function () {
    db.collection('user').doc('4c86bd845fa7f435001377816ec04bb8').remove().then((res) => {
      console.log(res)
    }).catch((err) => {
      console.log(err)
    })
  }

以上为删除单条数据。如果想批量删除,则可以使用云函数。

云函数

创建一个简单的云函数

要设置云函数,首先在为云函数文件夹添加环境。

然后在云函数文件夹中右键新建一个云函数。这里以一个两数相加的函数为例。

event指的是触发云函数的事件,当小程序端调用云函数时,event 就是小程序端调用云函数时传入的参数,外加后端自动注入的小程序用户的 openid和小程序的 appid。context 对象包含了此处调用的调用信息和运行状态,可以用它来了解服务运行的情况。

exports.main = async (event, context) => {
  return {
    sum: event.a + event.b
  }
}

在应用页面的.js中用.cloud.callFunction()函数引用云函数,这里用name属性找到相关函数。data里为传入云函数的相应参数。

  sum: function () {
    wx.cloud.callFunction({
      name: 'sum',
      data: {
        a: 1,
        b: 2
      }
    }).then((res) => {
      console.log(res)
    }).catch((err) => {
      console.log(err)
    })
  },

最后,右键将云函数上传到云端即可运行。

云函数的意义

云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。

比如我们调用login函数时,可以直接返回openid。

使用云函数批量删除数据库中数据

先建几个cuzz的数据。

然后编写云函数

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
  try {
    return await db.collection('user').where({
      name: 'cuzz'
    }).remove()
  } catch (e) {
    console.error(e);
  }
}

最后引用云函数

  batchDelete: function () {
    wx.cloud.callFunction({
      name: 'batchDelete'
    }).then((res) => {
      console.log(res)
    }).catch((err) => {
      console.error(err)
    })
  },

然后测试,发现我们的ICU选手已经被全被删除了。haha

 

云存储

云存储的过程如下

上传图片示例

现在我们按照上图所示的步骤完成图片的上传!

以上传图片为例。

这里先解释一下相关的API。

选择图片的API:

wx.chooseImage({
      count: 1,//图片上传数量
      sizeType: ['original', 'compressed'],//源文件或者压缩文件
      sourceType: ['album', 'camera'],//来自相册还是相机
      success(res) {
        // tempFilePath可以作为img标签的src属性显示图片
        const tempFilePaths = res.tempFilePaths
      }
    })

然后加上将图片上传到云存储的API

uploadPic: function () {
    wx.chooseImage({
      count: 1,//图片上传数量
      sizeType: ['original', 'compressed'],//源文件或者压缩文件
      sourceType: ['album', 'camera'],//来自相册还是相机
      success(res) {
        // tempFilePath可以作为img标签的src属性显示图片
        const tempFilePaths = res.tempFilePaths
        wx.cloud.uploadFile({
          cloudPath: 'example.png',
          filePath: tempFilePaths[0], // 文件路径
          success: res => {
            // get resource ID
            console.log(res.fileID)
          },
          fail: err => {
            console.log(err)
            // handle error
          }
        })
      }
    })
  },

最后将图片的文件ID(fileID)添加到数据库以便我们通过userID对图片对每个用户的图片进行查找

  uploadPic: function () {
    wx.chooseImage({
      count: 1,//图片上传数量
      sizeType: ['original', 'compressed'],//源文件或者压缩文件
      sourceType: ['album', 'camera'],//来自相册还是相机
      success(res) {
        // tempFilePath可以作为img标签的src属性显示图片
        const tempFilePaths = res.tempFilePaths
        wx.cloud.uploadFile({
          cloudPath: 'example.png',
          filePath: tempFilePaths[0], // 文件路径
          success: res => {
            // get resource ID
            console.log(res.fileID)
            db.collection('image').add({
              data: {
                fileID: res.fileID
              }
            }).then((res) => {
              console.log(res)
            }).catch((err) => {
              console.error(err)
            })
          },
          fail: err => {
            console.log(err)
            // handle error
          }
        })
      }
    })
  },

完成。我们点击添加图片后,图片会保存到存储空间,相应的文件ID会储存到数据库。

PS:每次上传到云存储的文件名字不能相同,否则会覆盖之前的文件。

从云存储获取图片示例

想要让云存储中的图片在本地展示,只要获取fileID并在image标签中引用即可。

说白了,直接在数据库中查询就可以,根本不用考虑储存的东西。

上代码。

  downloadPic: function () {
    //
    wx.cloud.callFunction({
      name: 'login'
    }).then((res) => {
      db.collection('image').where({
        _openid: res.result.openid
      }).get().then((res1) => {
        console.log(res1.data)
        this.setData({
          images: res1.data
        })
      })
    }).catch((err) => {
      console.log(err)
    })
    //
  },

注意要在data中添加一个images:[] 的属性。用于保存我们的fileID

在wxml中这样引用。当然根据data的形式可以灵活变换,多张图片可以使用循环的形式展示。

<image src="{{images[0].fileID}}"></image>

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值