| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 移动开发 -> 小程序学习第五天(云开发,behaviors,computed计算属性,工程优化 ,发布上线) -> 正文阅读 |
|
|
[移动开发]小程序学习第五天(云开发,behaviors,computed计算属性,工程优化 ,发布上线) |
一、云开发wxml <!--pages/index/index.wxml-->
<view class="container">
? ?<input type="text" model:value="{{phone}}" bindinput="input" placeholder="请输入账号"/>
? ?<input type="text" model:value="{{pass}}" bindinput="input" placeholder="请输入密码"/>
? ?<image src="{{img}}"></image>
?
? ?<button bindtap="chooseImage">选择图片</button>
? ?<button bindtap="addFile">add-file</button>
? ?<button bindtap="add">add</button>
? ?<button bindtap="get">get</button>
? ?<button bindtap="update">update</button>
? ?<button bindtap="remove">remove</button>
</view>
?
<view wx:for="{{arr}}">
? {{item.phone}}--- <image src="{{item.fileID}}"></image>
? ?<button size="mini" bindtap="getOne" data-id="{{item._id}}">详情</button>
? ?<button size="mini" bindtap="updateOne" data-id="{{item._id}}">修改</button>
?
</view>
?
js // 1)获取数据库的引用
let db = wx.cloud.database()
// console.log(db);
?
Page({
?
? ?/**
? ? * 页面的初始数据
? ? */
? ?data: {
? ? ? ?phone:"",
? ? ? ?pass:"",
? ? ? ?arr:[],
? ? ? ?img:""
? },
? ?onShow(){
? ? ? ?this.get()
? },
? ?input(){},
? ?add(){
? ? ? ?// 获取输入值
? ? ? ?let phone = this.data.phone
? ? ? ?let pass = this.data.pass
?
? ? ? ?// 执行添加数据
? ? ? ?db.collection('a-c').add({
? ? ? ? ? ?data:{
? ? ? ? ? ? ? ?// 字段名称:存储的数据
? ? ? ? ? ? ? ?phone:phone,
? ? ? ? ? ? ? ?pass:pass
? ? ? ? ? },
? ? ? ? ? ?success:res=>{
? ? ? ? ? ? ? ?console.log(res);
? ? ? ? ? ? ? ?if(res._id){
? ? ? ? ? ? ? ? ? ?wx.showToast({
? ? ? ? ? ? ? ? ? ? ?title: '添加成功',
? ? ? ? ? ? ? ? ? })
?
? ? ? ? ? ? ? ? ? ?this.get()
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? })
? },
? ?get(){
? ? ? ?// 小程序端获取 数据最多只能返回20条
? ? ? ?// 云函数端获取 数据做多只能返回100条
?
? ? ? ?// 获取多条数据 {}
? ? ? ?db.collection('a-c').where({}).get({
? ? ? ? ? ?success:res=>{
? ? ? ? ? ? ? ?console.log(res);
? ? ? ? ? ? ? ?this.setData({
? ? ? ? ? ? ? ? ? ?arr:res.data
? ? ? ? ? ? ? })
? ? ? ? ? }
? ? ? })
?
? },
? ?getOne(e){
? ? ? ?// console.log(e);
? ? ? ?let id = e.target.dataset.id
? ? ? ?// doc _id
? ? ? ?db.collection('a-c').doc(id).get({
? ? ? ? ? ?success:res=>{
? ? ? ? ? ? ? ?console.log(res);
? ? ? ? ? ? ? ?
? ? ? ? ? }
? ? ? })
? },
? ?update(){
? ? ? ?// 修改多条 where{}.update局部更新
? ? ? ? db.collection('a-c').where({"pass":"11"}).update({
? ? ? ? ? ? data:{
? ? ? ? ? ? ? ? pass:"123"
? ? ? ? ? ? },
? ? ? ? ? ? success:res=>{
? ? ? ? ? ? ? ? console.log(res);
? ? ? ? ? ? }
? ? ? ? })
?
? ? ? ?
? },
? ?updateOne(e){
? ? ? ?let id = e.target.dataset.id
? ? ? ?// 修改一条 doc(_id).update()/set()重新设置
? ? ? ?db.collection('a-c').doc(id).update({
? ? ? ? ? ?data:{
? ? ? ? ? ? ? ?pass:"11"
? ? ? ? ? },
? ? ? ? ? ?success:res=>{
? ? ? ? ? ? ? ?console.log(res);
? ? ? ? ? }
? ? ? })
? ? ? ?// db.collection('a-c').doc(id).set({
? ? ? ?// ? ? data:{
? ? ? ?// ? ? ? ? pass:"11"
? ? ? ?// ? ? },
? ? ? ?// ? ? success:res=>{
? ? ? ?// ? ? ? ? console.log(res);
? ? ? ?// ? ? }
? ? ? ?// })
? ? ? ?
? },
? ?remove(){
? ? ? ?// 删除多条 where({}).remove()
? ? ? ? db.collection("a-c").where({"pass":"123"}).remove()
? ? ? ? .then(res=>{
? ? ? ? ? ? console.log(res);
? ? ? ? })
? },
2.云函数一次最多可以获取100条数据,小程序端20条 可以直接返回openid----用户的唯一标识,appid等 小程序调用云函数: remove(){
?
? ? ? ?// 调用云函数
? ? ? ?wx.cloud.callFunction({
? ? ? ? ? ?name:"remove",//云函数名称
? ? ? ? ? ?data:{//传参
? ? ? ? ? ? ? ?collection:"a-c",
? ? ? ? ? ? ? ?where:{"pass":"123"}
? ? ? ? ? },
? ? ? ? ? ?success:res=>{
? ? ? ? ? ? ? ?console.log(res);
? ? ? ? ? }
? ? ? })
? }
云函数端--运行在云端的代码--后台代码 本地代码:每次修改记得上传到云端 // 云函数入口文件
const cloud = require('wx-server-sdk')
?
cloud.init({
? ?env: "dev-wmunf"
})
?
// 云函数入口函数
exports.main = async (event={}, context) => {
? ?// event 接收传递的参数 context 云函数的运行情况
? ?// const wxContext = cloud.getWXContext()
?
? ?let db = cloud.database()
? ?// 删除多条 必须放在云函数段删除
? ?let res = await db.collection(event.collection).where(event.where).remove()
? ?
?
? ?return {
? ? ? ?res,
? ? ? ?event, //默认注入appid openid
?
? }
}
3.云存储1.先获取临时图片路径 chooseImage(){
? ?
? ?// 调用 图片选择的api
? ?wx.chooseMedia({
? ? ? ?count: 1,
? ? ? ?success:(res)=> {
? ? ? ? ? ?// ? console.log(res.tempFiles[0].tempFilePath)
?
? ? ? ? ? ?// tempFilePath可以作为img标签的src属性显示图片
? ? ? ? ? ?this.setData({
? ? ? ? ? ? ? ?img:res.tempFiles[0].tempFilePath
? ? ? ? ? })
? ? ? }
? })
},
2.上传并添加 addFile(){
? ?if(!this.data.img)return;
?
? ?// 处理后缀名
? ?// http://tmp/lAuUCuVuzgXR0af76f9a39ef41a9f9057741d4ca427c.jpeg
? ?let extName = this.data.img.split(".").pop()
? ?// console.log(extName);
? ?// return
?
? ?// 处理云端路径
? ?let cloudPath = "web0712/"+new Date().getTime()+"."+extName
?
? ?// 1)调用 文件上传的api
? ?wx.cloud.uploadFile({
? ? ? ?cloudPath,
? ? ? ?filePath:this.data.img,
? ? ? ?success:res=>{
? ? ? ? ? ?console.log(res);
? ? ? ? ? ?if(res.fileID){
? ? ? ? ? ? ? ?// 2)文件id 存到数据里
?
? ? ? ? ? ? ? ?// ==============
? ? ? ? ? ? ? ?// 执行添加数据
? ? ? ? ? ? ? ?db.collection('a-c').add({
? ? ? ? ? ? ? ? ? ?data:{
? ? ? ? ? ? ? ? ? ? ? ?// 字段名称:存储的数据
? ? ? ? ? ? ? ? ? ? ? ?phone:this.data.phone,
? ? ? ? ? ? ? ? ? ? ? ?pass: this.data.pass,
? ? ? ? ? ? ? ? ? ? ? ?fileID:res.fileID
? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ?success:result=>{
? ? ? ? ? ? ? ? ? ? ? ?console.log(result);
? ? ? ? ? ? ? ? ? ? ? ?if(result._id){
? ? ? ? ? ? ? ? ? ? ? ? ? ?wx.showToast({
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?title: '添加成功',
? ? ? ? ? ? ? ? ? ? ? ? ? })
?
? ? ? ? ? ? ? ? ? ? ? ? ? ?this.get()
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? })
? ? ? ? ? }
? ? ? }
? })
}
二、behaviors
每个 示例:自己提取公共代码 common.js module.exports = Behavior({
properties:{
?
},
data:{
a:1,
b:0
},
methods:{
add(){
this.setData({
a:2
})
}
}
})
xx.js 页面使用 // pages/test/test.js
let myBehavior = require("../../common/common.js")
?
Component({
behaviors:[myBehavior],
data:{
sum:1
},
methods:{
?
}
})
三、computed计算属性computed | 微信开放文档 文档地址 1.1概述computed是小程序自定义组件扩展 behavior,在小程序组件中,计算属性 computed 和监听器 watch 的实现。在 data 或者 properties 改变时,会重新计算 computed 字段并触发 watch 监听器。目前针对的是component构造器 1.2扩展计算属性安装在小程序端根目录 执行命令 1.npm init -y 2.npm install --save miniprogram-computed 3.构建npm---【点击工具--构建npm】 4.使用npm---【点击详情--本地设置--使用npm模块】 1.3computed 基本用法test.wxml <view>{{a}}+{{b}}={{sum}}</view>
<button bindtap="add">add</button>
?
test.js // pages/test/test.js
let myBehavior = require("../../common/common.js")
let com = require("miniprogram-computed").behavior
?
Component({
behaviors:[myBehavior,com],
data:{
sum:1
},
computed:{
// sum(data){
// // 不能访问this
// return data.a+data.b
// }
},
// watch:{
// "a,b":function(a,b){
// console.log(a,b);
// this.setData({
// sum:a+b
// })
// }
// },
observers:{
"a,b":function(a,b){
console.log(a,b);
this.setData({
sum:a+b
})
}
},
methods:{
?
}
})
1.4computed vs watch从原理上说, 此外, 1.5watch vs observers
四、工程优化1.分包文档地址:分包加载 | 微信开放文档 某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时==按需进行加载==。每个使用分包小程序必定含有一个主包。所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据开发者的配置进行划分。 主包:必须包含启动页面,tabbar,公共的资源 脚本文件
?
分包:一个分包不超过2M
?
普通分包:依赖于主包内容----加载普通分包之前,先加载主包内容
独立分包:不依赖主包内容和其他分包。-----只加载自己分包内的资源
优势 1.在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后再进行展示。 2.单个分包/主包大小不能超过 2M,整个小程序所有分包大小不超过 20M,能够将工程大小扩充到20M 3.对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作。 1.1.配置分包结构app.json "subPackages": [
? {
? ? ? ?"root": "pagesA",
? ? ? ?"pages": [
? ? ? ? ? ?"dog/dog"
? ? ? ]
? },
? {
? ? ? ?"root": "pagesB",
? ? ? ?"pages": [
? ? ? ? ? ?"apple/apple",
? ? ? ? ? ?"banana/banana"
? ? ? ],
? ? ? ?"name": "fruit",
? ? ? ?"independent": true
? }
],
?
1.2.独立分包app.json "subPackages": [
? {
? ? ? ?"root": "pagesA",
? ? ? ?"pages": [
? ? ? ? ? ?"dog/dog"
? ? ? ]
? },
? {
? ? ? ?"root": "pagesB",
? ? ? ?"pages": [
? ? ? ? ? ?"apple/apple",
? ? ? ? ? ?"banana/banana"
? ? ? ],
? ? ? ?"name": "fruit",
? ? ? ?"independent": true //设置独立分包
? }
],
问题: console.log('b分包-apple');
?
// 问题:直接打开独立分包 获取不到全局实例
// 解决:allowDefault:true 允许获取到空对象 可以往全局实例中添加值
let app = getApp({allowDefault:true})//
app.isLogin = true //当App被调用时,默认实现中定义的属性会被覆盖合并到App中
?
console.log(app);
1.3.分包预下载app.json ?"preloadRule": {
? ?"pages/weui/weui":{
? ? ?"packages": ["fruit"],
? ? ?"network": "all"
? }
}
2.基础库低版本兼容兼容 | 微信开放文档 文档地址 小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。 2.1版本号比较比较方法【参考官方】 fun(){
// const version = wx.getSystemInfoSync().SDKVersion
?
// if (this.compareVersion(version, '2.10.4') >= 0) {
// wx.getUserProfile({
// desc: '完善资料',
// success:res=>{
// console.log(res);
// }
// })
// } else {
// // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
// wx.showModal({
// title: '提示',
// content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
// })
// }
},
compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
?
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
?
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
?
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
?
return 0
},
2.2API 存在判断 (常见)if (wx.getUserProfile) {
wx.getUserProfile({
?desc: '完善资料',
?success:res=>{
?console.log(res);
}
})
} else {
// 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
wx.showModal({
title: '提示',
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
})
}
2.3wx.canIUse console.log(wx.canIUse('showModal.object.editable'));
3.骨架屏使用骨架屏是页面的一个空白版本,通常会在页面完全渲染之前,通过一些灰色的区块大致勾勒出轮廓,待数据加载完成后,再替换成真实的内容。通常在小程序中,我们需要手工维护骨架屏的代码,当业务变更时,同样需要对骨架屏代码进行调整。为了开发的便利,开发者工具提供了自动生成骨架屏代码的能力。 先去project.config.json设置配置,在去生成骨架屏代码 骨架屏 | 微信开放文档 文档地址 五、发布上线完善小程序资料(头像 名称 服务类目 简介) ? 1.检查代码包大小 2M 使用分包 2.切换成真实的appid, 3.检查请求的接口是否是合法的域名--在小程序后台配置过域名 4.点击上传-生成开发版本,设置体验版,交给测试人员 5.提交审核(驳回,修改代码继续提交,成功了就提交发布,就可以生成线上版本了,所有人可以访问) ? |
|
|
| 移动开发 最新文章 |
| Vue3装载axios和element-ui |
| android adb cmd |
| 【xcode】Xcode常用快捷键与技巧 |
| Android开发中的线程池使用 |
| Java 和 Android 的 Base64 |
| Android 测试文字编码格式 |
| 微信小程序支付 |
| 安卓权限记录 |
| 知乎之自动养号 |
| 【Android Jetpack】DataStore |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/29 3:18:19- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |