微信云开发


# day1

# 增删查改

今天学会了在微信开发中如何对数据库进行增删改查,和进行页面之间的跳转,还有数据之间的传递。

wx.cloud.database().collection('goods')
            .add({
                data:{
                    name:goodname,
                    price:price
                } 
            })

# ID 传递

data-id 与后面获取的变量名 id 相对应

<view bindtap='goDetail' data-id="{{item._id}}">商品名:{{item.name}},价格:{{item.price}}</view>

console.log("点击了跳转商品详情",event.currentTarget.dataset.id)

在 app.json 中的 pages 新增页面,页面的次序是有影响的

# 返回结果

wx.cloud.database().collection('goods').get()
.then(res=>{
    console.log('成功',res)
})
.catch(err=>{
    console.log('失败',err)
})


# day2

通过封装方法,使用 this 进行调用,在使用 this 时要注意所在的作用域

this.getList()

使用全局变量来传递值,可以使用 let,也可以使用 var 变量

可以在 updated 中的 status 中看出是否有更新成功,在对数据库进行操作时要注意权限问题

使用 return 截断错误,方便调试

接受数字小心是字符串,可以通过是否变蓝看出,可以使用 parseInt (price) 来进行强制转换

可以使用变量接收数据库对象,来方便操作

限制返回的数据条数 .limit(3)

跳过若干条数据,用于分页 .skip(1)

要注意套餐所给的量,小心写,不然用完就要开新的套餐。数据库的读写次数是有限制的

# 快捷键使用

快捷键 作用
Ctrl+B 编译
Ctrl+z 撤销操作
Ctrl+s 保存
shift+Alt + 方向键 向对应方向复制当前行
Ctrl+ALT+l 格式化代码
shift+Alt+f 全局搜索
Ctrl+f 当前页面搜索
Ctrl+h 查找并替换

# 绑定事件

前端界面绑定方法,bindtap 点击事件,bindinput 输入事件,然后在后端函数中获取值

// 前端页面
<input bindinput="getPrice"></input>
// 后端页面
getPrice(event) {
        price = event.detail.value
    },

# 弹窗提示确认是否删除

wx.showModal({
          cancelColor: 'cancelColor',
          title:"是否确定删除",
          content:"您再仔细想一想,是否真的要删除,删除后不可恢复",
          success(res){
              if(res.confirm==true){//用户点击了确认
                console.log('点击确定',res)
              }else if(res.cancel==true){//用户点击了取消
                console.log('点击取消',res)
              }
          }
        })

# 页面跳转

wx.navigateTo({
              url: '/pages/demo1/demo1',
            })

# 升序排列

asc 表示升序,desc 为降序,前面是关键字

.orderBy("price",'asc')

# command 命令筛选

可以在微信开放文档 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Command.html 中查看具体,常见的有 gt 大于,lt 小于,gte 大于等于

还可以使用 and 关键字设置多个查找条件,要注意格式 and ([]),[] 中用 {} 包裹筛选条件

.where({
        price:db.command.gt(10),
    })
    
// 组合查找
.where(_.and([{
            price: _.gt(10)
        }, //大于10
        {
            price: _.lt(20)
        }, //小于20
    ]))

# 云函数

# 初始化云函数

新增的文件夹一定要与 pages 平级,可以先点击与 pages 平级的文件,再点击新增文件夹,命名为 cloud,或者在云函数列表中右键新增 node.js 云函数

在 project.config.json 文件顶部配置云函数所在目录为 cloud,可以根据喜欢换名字,只要能对应起来就可以

"cloudfunctionRoot":"/cloud",

保存成功,此时 cloud 文件夹会出现云朵标志,代表初始化成功

# 注意事项

要注意云函数的环境要和小程序的环境对应

文件夹右键选择新建 node.js 文件

# 云函数的调用

使用 callFunction, 在 name 处填写需要调用的云函数名称

//云函数的调用
//传统写法
wx.cloud.callFunction({
    name:'getData',
    success(res){
        console.log('请求云函数成功',res)
    },
    fail(err){
        console.log('请求云函数失败',res)
    }
})
// 建议写法
wx.cloud.callFunction({
    name: 'getData'
})
.then(res => {
    console.log('成功', res)
    this.setData({
      // 传递值
        openid: res.result.openid
    })
})
.catch(err => {
    console.log('失败', err)
})

# 云函数获取数据

云函数只要有变动,就要重新部署,否则云函数不生效

部署选择上传并部署:云端安装依赖 (不上传 node_modules)

如果只改变了 js 文件,可点击对应的 js 文件,右键选择云函数增量上传:更新文件

而且在云函数中操作数据库时,不再需要写 wx,wx 只在本地编写的时候才需要写

有多个云开发环境的时候,需要指定环境,或者使用 DYNAMIC_CURRENT_ENV 指定为当前环境(提倡写法)

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

# day3

文件可以导出为 json 格式,可以使用记事本进行打开

导入的时候可以选择 insert 和 upsert 模式,使用 insert 时注意不要有多个 id 相同的情况出现,否则会报错。建议使用 upsert 模式。

云函数一次最多可返回 100 条数据,本地一次最多可返回 20 条数据。

云函数中 console 在云端打印,我们在调试器中只能看到本地的 console。

# 向云函数传递值

在 data 中传递值,在云函数中使用 event 接收对应的值

wx.cloud.callFunction({
    name = 'update0129',
    data:{
        id:id,
        price:20
    }
})
// 云函数
event.id和event.price

# day4

在编写云函数时,要注意先保存再上传到云端。

创建云函数不难,相当于把本地的代码移到云函数,去掉 wx

可以导入源码,但是如果使用别人的源码需要改开发者 ID

# 选择文件接口

用户选择文件接口(api)

https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseMedia.html

也可以选择 chooseImage 接口

chooseImg() {
    //上传图片的第一步
    wx.chooseImage({
        count: 1, //可以选择多少张图片
        sizeType: ['original', 'compressed'],
        sourceType: ['album', 'camera'], //设置图片来源
        success:res=> {
            this.uploadImg(res.tempFilePaths[0])
        }
    })
},

# 文件上传

然后就可以对获取到的文件进行上传

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/uploadFile/client.uploadFile.html

uploadImg(temfile){
    console.log('要上传图片的临时路径',temfile)
    wx.cloud.uploadFile({
        cloudPath: '西芹1.png',
        filePath: temfile, // 文件路径
        success: res => {
          console.log('上传成功',res)
        },
        fail: err => {
          console.log('上传失败',err)
        }
      })
}

点击预览即可在手机上体验使用小程序上传图片

# day5

存储图片路径,使用存储中的下载地址,复制的时候注意不要复制问号后面的东西,因为是时间戳,可能导致图片失效。

# 上传视频

https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseVideo.html

wx.chooseVideo({
  sourceType: ['album','camera'],
  maxDuration: 60,
  camera: 'back',
  success(res) {
    console.log(res.tempFilePath)
  }
})

上传视频有时候比较慢,需要耐心等待。

通过 type 值判断是上传视频还是图片

<image wx:if="{{showImg}}" src="{{imgUrl}}"></image>
<video wx:if="{{showVideo}}" src="{{videoUrl}}"></video>

# 上传 Word 和 PDF 文件

https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseMessageFile.html

从客户端会话选择文件。

wx.chooseMessageFile({
  count: 10,
  type: 'image',
  success (res) {
    // tempFilePath可以作为img标签的src属性显示图片
    const tempFilePaths = res.tempFiles
  }
})

# 文件下载

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/downloadFile/client.downloadFile.html

从云存储空间下载文件

wx.cloud.downloadFile({
  fileID: 'a7xzcb'
})}).then(res => {
    console.log('下载成功')
}).catch(error => {
    console.log('下载失败')
})

# day6

vue 文件中,data 初始化需要使用的数据,生命周期函数写在 methods 外面,而自定义的函数写在 methods 内。

传递值不需要 setdata,只需要 this. 变量名 = 值即可。

# 目录结构

目录名 作用
pages 页面存放目录
static 静态文件目录
APP.vue 应用入口文件,和小程序 app.js 类似
main.js 应用入口文件,注册 vue 等
manifest.json 项目配置
pages.json 页面配置
common 存放共用的文件
components 自定义组件目录
store vuex 目录
unpackage 编译后的文件目录

# 前端控制语句

函数 作用
v-bind 可以简写为:,组件属性要使用 data 中定义的数据变量,或者组件属性使用表达式,要使用 v-bind 指定
v-on 可以简写为 @绑定事件
v-model 数据双向绑定,例如根据输入值动态改变 data 中的值
v-if 条件判断,决定某个内容或者区块是否挂载
v-show 条件判断,是否显示
v-for 列表渲染,遍历循环,可以使用 index 获取序号,可以使用 value 和 key 获取对象中的对应关系

onclick 事件也能够通过写表达式改变值,.stop 可以阻止事件穿透

# 生命周期

# 应用的生命周期(APP.vue)

周期名 意义
onLaunch 应用初始化完成执行,全局只执行一次,通常做登录的处理
onShow 应用显示时执行,或者从后台进入前台
onHide 应用隐藏时执行,或者从前台进入后台

# 页面的生命周期

onReady 在 onShow 之后触发,因为要等待数据

周期名 意义
onLoad 页面加载时触发
onReady 页面初次完成渲染时触发
onShow 页面显示时触发
onUnload 页面卸载时触发
onHide 页面隐藏时触发

在写完云函数之后,一定要先停止在模拟器上运行,在编译一次才可以的,然后上传到云端,就可以进行使用了

v-model 真的是神器,省去了很多获取值的麻烦操作


文章作者: xiqin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xiqin !
  目录