小程序笔记
文章描述
基础课程部分
# 微信公众平台
https://mp.weixin.qq.com/(opens new window)
注册时可选择类型:订阅号、服务号、小程序、企业微信
每个邮箱仅能注册一个小程序。
个人类型小程序:无法使用微信支付、无法使用卡包功能
# 小程序文档 API
# 微信开放社区
# 目录说明
默认目录
pages----------------------- 页面相关
index ----------------- 首页文件夹
index.js ------------ 首页 js
index.json--------- 首页配置
index.wxml------- 首页 html
index.wxss-------- 首页 css
utils------------------------ 工具相关
app.js ---------------------- 项目总 js
app.json------------------- 全局配置 ( 页面路由以及头部、底部导航的配置等)
app.wxss ----------------- 项目总样式 css
project.config.json ---- 项目配置
代码构成
.json :配置文件,以 json 格式存储配置
项目中有三种配置:项目配置(project.config.json)、全局配置(app.json)、页面配置(index.json)
.wxml: 相当于 html 文件
.wxss: 相当于 css
.js : 就是 js
# 文件说明
project.config.json 项目配置 部分代码说明
setting:{
urlCheck 是否检测安全的域名
es6 是否把 es6 转 es5
postcss 是否把 css 样式自动补全
minified 是否压缩
}
app.json 全局配置
wxml 相关介绍
wxss 相关介绍
尺寸单位:rpx,根据屏幕宽度自适应。
引入外部 wxss:@import ’...‘
js 相关介绍
WXS(WeiXin Script)是小程序的一套脚本语言
绑定点击事件
# 阻止事件冒泡
把绑定方式 bindtap 换成 catchtap 即可。
# 第三方库
WeUI
weUI 是一套同微信原生视觉体验一致的基础样式库
iView Weapp
一套高质量的微信小程序 UI 组件库
Vant Weapp
轻量、可靠的小程序 UI 组件库
# 云开发
小程序传统开发模式
客户端 -----> 服务端(后端代码、数据库)------> 运维(DB 维护、文件存储、内容加速、网络防护、容器服务、负载均衡、安全加固等...)
小程序云开发模式
客户端 -----> 云开发(云函数、云数据库、云存储)
传统开发 VS 云开发
开发效率低 Serverless(无服务)
运维成本高 开发者更关注业务逻辑
无服务(Serverless)开发是未来的发展趋势
#云开发三大基础能力
# 云函数
(相当于传统开发中的后台接口)
获取 appid、获取 openid、生成分享图、调用腾讯云 SDK ...
# 云数据库
数据的增、删、改、查 ...
# 云存储
管理文件、上传文件、下载文件、分享文件 ...
每个小程序账号可免费创建两个环境,建议:开发环境、生成环境
# 云数据库能力
云开发提供了一个 json 数据库,提供 2GB 免费存储空间。
# 数据类型
String 字符串
Number 数字
Object 对象
Array 数组
Boolean 布尔值
GeoPoint 地理位置点
Date 时间 (精确到毫秒 ms,客户端时间)
Null 空
# 操作云数据库
小程序控制(读写数据库受权限限制)
云函数控制(拥有所有读写数据库的权限)
控制台控制(拥有所有读写数据库的权限)
# 云数据库权限管理
仅创建者可写,所有人可读 (适合于文章)
仅创建者可读写 (适用于私密内容)
仅管理端可写,所有人可读(适用于商品信息)
仅管理端可读写(适用于后台敏感数据)
# 操作云数据库
# 实战课程部分
#serverless(无服务)
概念:函数即服务,当需要后端服务的时候,不需要关心后端的 IP 地址、域名,只需要像调用普通函数一样既可以实现调用。
# 云开发优势
快速上线、专注核心业务、独立开发一个完整的微信小程序、不需要学习新的语言,只需要会 javascript、无需运维, 节约成本、数据安全、
# 云开发提供能力
云函数:在云端运行的代码,微信私有协议天然鉴权 (理解:相当于后端部分)
云数据库:一个既可以在小程序端操作又可以在云函数中操作的 JSON 数据库
云存储:在云端存储文件,可以在云端控制台可视化管理
云调用:基于云函数免鉴权使用小程序开放接口的能力(比如说给用户推送消息等)
HTTP API:使用 HTTP API 开发者可在已有服务器上访问云资源,实现与云开发的互通(作用:对原有传统模式下开发的小程序,可以与云开发进行互通)
#appID
每个小程序唯一的 id
# 云开发项目默认目录结构
cloudfunctions ---------------------------- 云函数
callback ---------------------------------- 回调函数
config.json ---------------------------
index.js --------------------------------
package.json ------------------------
echo ----------------------------------------
login ----------------------------------------
openapi -----------------------------------
miniprogram ------------------------------- 小程序
images ------------------------------------- 图片
pages --------------------------------------- 页面
style ----------------------------------------- 样式
app.js --------------------------------------- 项目 js
app.json ----------------------------------- 全局配置
app.wxss ---------------------------------- 项目样式
sitemap.json ----------------------------- (小程序 SEO 相关)
project.config.json ----------------------- 项目配置
# 云开发环境
云开发可创建两个环境,建议一个为开发环境,一个为生产环境
# 开发前的准备
开发工具 > 右上角详情 > 本地设置 > 调试基础库 设置为最新版本
app.js > wx.cloud.init > env 设置环境 ID
#project.config.json 文件说明
miniprogramRoot 小程序前端代码目录
cloudfunctionRoot 云函数代码目录
#app.json
pages 设置页面 ,设置后会自动在 pages 目录下生成相应的目录和文件
设置底部导航按钮:
图标来自于 https://www.iconfont.cn(opens new window)
阿里巴巴图标库,包含矢量图标、字体图标、字体等
# 代码规范
很多公司借鉴的代码规范:https://github.com/airbnb/javascript(opens new window)
#《音乐》页面开发
# 自定义组件
创建组件
创建目录 components > 组件目录名称 > 右键 新建Component
#引入组件
在 page 的 json 文件中:
在 page 的 wxml 中:
页面引入组件以及组件内部在引用子组件的方法是一样的,同样需要设置 json 文件。
#组件传值
父组件中:在引入组件的时候自定义属性名称,并把数据传入子组件
子组件中: 子组件的 js 文件:
#wx:key 的使用
key 的值不建议使用 index,因为当数据发生变化会 dom 结构产生变化时,使用 index 的地方不会随之变化。
可以使用数据内部每项不一样的一个数值,如 id
#async/await 语法
目前,在云函数里,由于 Node 版本最低是 8.9,因此是天然支持 async/await 语法的。而在小程序端则不然。在微信开发者工具里,以及 Android 端手机(浏览器内核是 QQ 浏览器的 X5),async/await 是天然支持的,但 iOS 端手机在较低版本则不支持,因此需要引入额外的 文件。
可把这个 runtime.js (opens new window) 文件引用到有使用 async/await 的文件当中。
# 云函数的使用
cloudfunctions 目录 右键 新建 Node.js 云函数 > 输入目录名 getPlaylist
在云函数中向第三方服务器发送请求要依赖第三方库
安装依赖包
云函数目录 getPlaylist 右键 在终端打开 打开命令行 输入命令:
github request-promise:https://github.com/request/request-promise(opens new window)
然后写相应代码
写完代码,云函数目录 getPlaylist 右键 上传并部署:云端安装依赖(不上传node_modules) 进行上传部署代码到云端,等待上传成功,打开云开发控制台即可看到已经上传的云函数,并可对云函数进行测试。
# 数据库操作
数据库> 创建集合 > playlist
# 查询数据库
# 云函数调试
云控制台中可会云函数进行云端测试
在小程序调用云函数后,可查看云函数日志
# 定时触发云函数
如果云函数需要定时 / 定期执行,也就是定时触发,我们可以使用云函数定时触发器。配置了定时触发器的云函数,会在相应时间点被自动触发,函数的返回结果不会返回给调用方
云函数目录下新建 config.json
编辑好触发器之后,要在云函数目录 > 右键 > 上传触发器
# 配置云函数超时时间
当云函数比较复杂的时候,默认的超时时间 3 秒可能不能够满足需求,可以适当的设置更为合理的时间
云开发控制台 > 云函数 > 配置 > 超时时间
# 上拉加载与下拉刷新
# 云函数路由优化 tcb-router
一个用户在一个云环境只能创建 50 个云函数
假如小程序非常复杂,50 个云函数不能够满足业务需求怎么办?
相似的请求归类到同一个云函数处理
tcb-router 是一个 koa 风格的云函数路由库
通俗理解就是可以把很多个接口归类到同一个云函数内。
github-tcb-router: https://github.com/TencentCloudBase/tcb-router(opens new window)
koa 洋葱模型...
安装:
代码:
上面 tcb-router 代码会按照洋葱模型执行,即先从上往下逐个进入中间件,再从下往上逐个退出中间件。
# 本地存储(缓存)
#api 设置 title
# 背景播放音
BackgroundAudioManager (opens new window) 全局唯一的背景音频管理器
代码:
#createSelectorQuery 查询节点信息
createSelectorQuery (opens new window) 小程序的方法,用于查询节点等操作
# 组件内的方法
Component(Object object)(opens new window)
# 组件生命周期
# 组件所在页面的生命周期
# 组件对数据的监听
# 子组件自定义事件传递给父组件
# 父组件自定义事件传递给子组件
# 兄弟组件间传递事件和传值
# 获取手机信息
wx.getSystemInfo(Object object)(opens new window)
# 滚动组件
# 全局属性、方法(类似 vuex)
# 消息提示框
#《发现》页面
# 调用组件外部的样式
components 内部的组件无法直接调用外部的样式。可通过以下方式调用组件外部样式:
方法一:
方法二:
# 组件插槽 slot
单个插槽
如果需要实现多个插槽
# 判断用户授权
#button 的开发能力(获取用户信息)1
# 原生组件
# 选择上传图片
# 图片裁剪
# 获取标签自定义属性 data-* (删除图片的实现)
# 全屏预览图片 (点击图片放大预览)
# 文件上传云存储(发布博客例子)
#js 模块化 (时间格式化)
在目录 utils 中新建 formatTime.js 文件
在组件引入 js 模块
# 阻止事件冒泡
bind 和 catch 都可以绑定事件,它们的区别是 bind 有事件冒泡,而 catch 没有
# 返回上一个页面并执行方法
# 图片懒加载
懒加载占位图可以给 image 设置背景图或背景色
# 模糊查询
# 提升模糊查询的效率 (添加索引,对数据量大的查询效果明显)
云开发控制台 > 数据库相应的集合 > 索引管理 > 添加索引 > 输入自定义索引名称、该字段的值是否唯一、被查询的字段名、升序/降序 > ok
# 小程序端调用云数据库
一般调用云数据库的操作都写在云函数内,其实小程序端也可以对数据库进行操作。
小程序端一次最多只能查询 20 条数据,云函数端最多可查询 100 条数据,可使用多次查询拼接的方式突破限制。
# 云数据库权限管理
注意:云控制台和服务端(云函数)始终有所有数据读写权限,
但权限的管理仅对小程序端发起的请求有效。
仅创建者可写,所有人可读 (适合于文章)
仅创建者可读写 (适用于私密内容)
仅管理端可写,所有人可读(适用于商品信息)
仅管理端可读写(适用于后台敏感数据)
# 数据库中 1 对 N 关系的三种设计方式
# 第一种:N 的数量较少 几十个以内
1 条记录存储 N 个子数据
如一条博客中,最多有 9 张图片,这 9 张图片可和其他数据放在一个记录中。
# 第二种:N 的数量较多 几十到几百个
1 存储 每个 N 的 id
可分两个数据库集合,
一个为 ' 目录 ' 集合,存放 ' 详情 ' 集合下的每条数据的 id 目录
一个为 ' 详情 ' 集合,每条数据对应一个单独的 id 和 详细数据
如歌单列表,与歌曲详情的数据组合设计。
# 第三种:N 的数量巨大 几百成千上万个
每个 N 都存储 1 的 id
如新浪博客中的一条博客下面有几千条评论
# 云调用
通过云函数调用服务端的开发接口
这些接口如:模板消息推送、生成小程序码...
# 模板消息推送
1、使用 from 表单才能触发消息推送,并设置 report-submit="true"
2、需要到微信公众平台做相应的设置:
微信公众平台 > 功能 > 模板消息 > 添加模板 > 选择相应的模板> 添加成功后会有一个模板 ID
3、新建一个云函数,用于云调用。在该云函数下新建配置文件:config.json ,用于配置权限
config.json :
云函数设置消息推送:
4、在提交表单事件完成后调用消息推送云函数
# 云函数多集合查询数据库
# 分享功能
分享功能需要 button 标签,设置 open-type="share"
在 js 中有 onShareAppMessage 方法,点击 button 会自动执行此方法
# 不同场景获取用户信息的方式
# 场景一:只想在界面上显示自己的昵称和头像
以组件的方式:根据 type 类型获取不同用户数据
该方式不需要授权,只能用于在 wxml 显示自己的信息
# 场景二:在 JS 中获取用户信息
该方式要在用户授权以后才能获取用户信息
wx.getUserInfo(opens new window)
在未授权的情况下需要用户先授权:
注意:上面这种方式没有获取到 openId
# 场景三:获取 openId
获取 openId 不需要用户授权
1、传统开发方式获取 openId,后台服务器由自己开发,没使用云开发
小程序端 微信服务器 后端服务器
步骤:
小程序端 调用 wx.login 向微信服务器 获取 code
小程序端 调用 wx.request 将 code 传递给 后端服务器
后端服务器 使用 code 向微信服务器 换取 openid 和 session_key
后端服务器 将 openid 发送给 小程序端
2、云开发方式获取 openId
云函数 login 中
普通按钮
openid 在小程序和公众号下是不一样的
unionid 在小程序和公众号下都是一样的
#《我的》页面
json 文件
# 导航页面链接跳转
# 背景图片
wxss 背景图片不支持本地相对路径的图片,只支持网络图片和 base64 图片
建议使用 base64 图片,图片文件最好不要太大。
# 每个页面都有的 page 标签
# 播放历史与本地存储
方案一:播放历史存储在数据库当中,这样在不同设备访问都可查看播放历史。读取速度相对较慢
方案二:播放历史存储在本地,仅当前设备可查看播放历史。读取速度较快
本项目采用本地存储:
使用 openid 作为本地存储的 key,播放历史存入 value
在 app.js 中获取 openid,即打开小程序就获取 openid。
歌曲播放时
播放历史页面获取
# 我的发现
代码分别演示了从云函数和小程序端获取数据,从小程序端获取数据享有权限管理的能力,不需要传 openid。
# 小程序码
本项目演示使用 接口 B:适用于需要的码数量极多的业务场景 (opens new window)云调用 的方式。
步骤:
创建云函数 gteQRCode
gteQRCode 云函数下创建 config.json 配置权限,代码如下:
入口函数:
# 判断是从扫码小程序码进入,以及参数获取
# 版本更新检测
# 性能优化
使用开发者工具的调试器,Audits 进行评分,然后根据提示针对项目进行优化。
# 场景值 scene 的作用与应用场景
场景值用来描述用户进入小程序的路径。完整场景值的含义请查看 场景值列表 (opens new window)。
可根据不同场景进入实现不同业务处理,比如一个点餐小程序,店家内贴了小程序码,用户通过扫码进入,可立即进入点餐页面,等等
在 app.js 中的 onLaunch(options) 、onShow(options),options 包含 scene 场景值
开发者工具中,切后台,可模拟进入场景。
# 小程序的 "SEO"--- 页面收录 sitemap
在 app.js 的同级目录下有 sitemap.json 文件,用于配置收录规则
作用:
使小程序搜索可根据小程序的内容进行搜索到
使用方法:
1、在微信公众平台,小程序信息 > 页面收录设置 > 打开 (默认是已开启)
2、打开 sitemap.json 文件,配置收录规则
更多键值:
# 小程序上线审核流程
微信公众平台,版本管理>把小程序上传为体验版》提交审核》上线
# 后台管理系统
# 架构示意图
前端 后台 小程序云开发
vue-admin-template <--- 通过 ajax--> 基于 Koa2;HTTP API 或 tcb-admin-node ---->云函数、云数据库、云存储
#vue-admin-template 构建管理系统前端
vue-element-admin (opens new window) 基于 element 的后台管理系统模板
vue-admin-template (opens new window) 是 vue-element-admin (opens new window) 的简化版
使用方法查看官方文档。
#Koa2 构建管理系统后端
官网: https://koa.bootcss.com/(opens new window)
新建空文件夹 wx-music-admin-backend,打开终端:
app.js:
终端:
# 接口调用凭证 access_token 的缓存与更新
access_token,微信的接口调用凭证,详情:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html(opens new window)
回到项目 wx-music-admin-backend,打开终端:
代码:
# 后端代码通过 HTTP API 触发云函数获取数据
HTTP API 触发云函数(opens new window)
# 产生跨域和后端解决跨域问题
管理系统前端向管理系统后端请求数据,产生了跨域问题
管理系统后端,安装
app.js
# 云数据库的增删改查接口
# 后端获取前端 post 请求传来的数据
get 请求可以直接通过 ctx.request.query 获取,但是 post 请求需要安装 koa-body
app.js
接口.js
# 后端获取云存储图片
云存储中上传图片,云数据库中新建图片的集合,并添加数据字段,字段包含云文件的 fileid。
后端项目通过调用云数据库的方式获取数据
但获取到的数据为 fileid,并不能用于显示图片,需要通过微信 HTTP API 获取云存储的接口来获取图片地址
# 后端上传图片到云存储
Last updated