小程序笔记

文章描述

基础课程部分

#arrow-up-right 微信公众平台

https://mp.weixin.qq.com/(opens new window)arrow-up-right

注册时可选择类型:订阅号、服务号、小程序、企业微信

每个邮箱仅能注册一个小程序。

个人类型小程序:无法使用微信支付、无法使用卡包功能

#arrow-up-right 小程序文档 API

小程序开发文档(opens new window)arrow-up-right

#arrow-up-right 微信开放社区

微信开发社区(opens new window)arrow-up-right

#arrow-up-right 目录说明

默认目录

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

#arrow-up-right 文件说明

project.config.json 项目配置 部分代码说明

setting:{

urlCheck 是否检测安全的域名

es6 是否把 es6 转 es5

postcss 是否把 css 样式自动补全

minified 是否压缩

}

app.json 全局配置

全局配置API(opens new window)arrow-up-right

wxml 相关介绍

wxmlAPI(opens new window)arrow-up-right

wxss 相关介绍

wxssAPI(opens new window)arrow-up-right

尺寸单位:rpx,根据屏幕宽度自适应。

引入外部 wxss:@import ’...‘

js 相关介绍

WXS(WeiXin Script)是小程序的一套脚本语言

wxsAPI(opens new window)arrow-up-right

绑定点击事件

#arrow-up-right 阻止事件冒泡

把绑定方式 bindtap 换成 catchtap 即可。

#arrow-up-right 第三方库

WeUI

weUI 是一套同微信原生视觉体验一致的基础样式库

iView Weapp

一套高质量的微信小程序 UI 组件库

Vant Weapp

轻量、可靠的小程序 UI 组件库

#arrow-up-right 云开发

小程序传统开发模式

客户端 -----> 服务端(后端代码、数据库)------> 运维(DB 维护、文件存储、内容加速、网络防护、容器服务、负载均衡、安全加固等...)

小程序云开发模式

客户端 -----> 云开发(云函数、云数据库、云存储)

传统开发 VS 云开发

开发效率低 Serverless(无服务)

运维成本高 开发者更关注业务逻辑

无服务(Serverless)开发是未来的发展趋势

#arrow-up-right云开发三大基础能力

#arrow-up-right 云函数

(相当于传统开发中的后台接口)

获取 appid、获取 openid、生成分享图、调用腾讯云 SDK ...

#arrow-up-right 云数据库

数据的增、删、改、查 ...

#arrow-up-right 云存储

管理文件、上传文件、下载文件、分享文件 ...

每个小程序账号可免费创建两个环境,建议:开发环境、生成环境

#arrow-up-right 云数据库能力

云开发提供了一个 json 数据库,提供 2GB 免费存储空间。

#arrow-up-right 数据类型

String 字符串

Number 数字

Object 对象

Array 数组

Boolean 布尔值

GeoPoint 地理位置点

Date 时间 (精确到毫秒 ms,客户端时间)

Null 空

#arrow-up-right 操作云数据库

小程序控制(读写数据库受权限限制)

云函数控制(拥有所有读写数据库的权限)

控制台控制(拥有所有读写数据库的权限)

#arrow-up-right 云数据库权限管理

仅创建者可写,所有人可读 (适合于文章)

仅创建者可读写 (适用于私密内容)

仅管理端可写,所有人可读(适用于商品信息)

仅管理端可读写(适用于后台敏感数据)

#arrow-up-right 操作云数据库

#arrow-up-right 实战课程部分

#arrow-up-rightserverless(无服务)

概念:函数即服务,当需要后端服务的时候,不需要关心后端的 IP 地址、域名,只需要像调用普通函数一样既可以实现调用。

#arrow-up-right 云开发优势

快速上线、专注核心业务、独立开发一个完整的微信小程序、不需要学习新的语言,只需要会 javascript、无需运维, 节约成本、数据安全、

#arrow-up-right 云开发提供能力

云函数:在云端运行的代码,微信私有协议天然鉴权 (理解:相当于后端部分)

云数据库:一个既可以在小程序端操作又可以在云函数中操作的 JSON 数据库

云存储:在云端存储文件,可以在云端控制台可视化管理

云调用:基于云函数免鉴权使用小程序开放接口的能力(比如说给用户推送消息等)

HTTP API:使用 HTTP API 开发者可在已有服务器上访问云资源,实现与云开发的互通(作用:对原有传统模式下开发的小程序,可以与云开发进行互通)

每个小程序唯一的 id

#arrow-up-right 云开发项目默认目录结构

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 ----------------------- 项目配置

#arrow-up-right 云开发环境

云开发可创建两个环境,建议一个为开发环境,一个为生产环境

#arrow-up-right 开发前的准备

开发工具 > 右上角详情 > 本地设置 > 调试基础库 设置为最新版本

app.js > wx.cloud.init > env 设置环境 ID

#arrow-up-rightproject.config.json 文件说明

miniprogramRoot 小程序前端代码目录

cloudfunctionRoot 云函数代码目录

pages 设置页面 ,设置后会自动在 pages 目录下生成相应的目录和文件

设置底部导航按钮:

图标来自于 https://www.iconfont.cn(opens new window)arrow-up-right

阿里巴巴图标库,包含矢量图标、字体图标、字体等

#arrow-up-right 代码规范

很多公司借鉴的代码规范:https://github.com/airbnb/javascript(opens new window)arrow-up-right

#arrow-up-right《音乐》页面开发

#arrow-up-right 自定义组件

创建组件

创建目录 components > 组件目录名称 > 右键 新建Component

#arrow-up-right引入组件

在 page 的 json 文件中:

在 page 的 wxml 中:

页面引入组件以及组件内部在引用子组件的方法是一样的,同样需要设置 json 文件。

#arrow-up-right组件传值

父组件中:在引入组件的时候自定义属性名称,并把数据传入子组件

子组件中: 子组件的 js 文件:

#arrow-up-rightwx:key 的使用

key 的值不建议使用 index,因为当数据发生变化会 dom 结构产生变化时,使用 index 的地方不会随之变化。

可以使用数据内部每项不一样的一个数值,如 id

#arrow-up-rightasync/await 语法

目前,在云函数里,由于 Node 版本最低是 8.9,因此是天然支持 async/await 语法的。而在小程序端则不然。在微信开发者工具里,以及 Android 端手机(浏览器内核是 QQ 浏览器的 X5),async/await 是天然支持的,但 iOS 端手机在较低版本则不支持,因此需要引入额外的 文件。

可把这个 runtime.js (opens new window)arrow-up-right 文件引用到有使用 async/await 的文件当中。

#arrow-up-right 云函数的使用

cloudfunctions 目录 右键 新建 Node.js 云函数 > 输入目录名 getPlaylist

在云函数中向第三方服务器发送请求要依赖第三方库

安装依赖包

云函数目录 getPlaylist 右键 在终端打开 打开命令行 输入命令:

github request-promise:https://github.com/request/request-promise(opens new window)arrow-up-right

然后写相应代码

写完代码,云函数目录 getPlaylist 右键 上传并部署:云端安装依赖(不上传node_modules) 进行上传部署代码到云端,等待上传成功,打开云开发控制台即可看到已经上传的云函数,并可对云函数进行测试。

#arrow-up-right 数据库操作

数据库> 创建集合 > playlist

#arrow-up-right 查询数据库

#arrow-up-right 云函数调试

云控制台中可会云函数进行云端测试

在小程序调用云函数后,可查看云函数日志

#arrow-up-right 定时触发云函数

如果云函数需要定时 / 定期执行,也就是定时触发,我们可以使用云函数定时触发器。配置了定时触发器的云函数,会在相应时间点被自动触发,函数的返回结果不会返回给调用方

云函数目录下新建 config.json

API(opens new window)arrow-up-right

编辑好触发器之后,要在云函数目录 > 右键 > 上传触发器

#arrow-up-right 配置云函数超时时间

当云函数比较复杂的时候,默认的超时时间 3 秒可能不能够满足需求,可以适当的设置更为合理的时间

云开发控制台 > 云函数 > 配置 > 超时时间

#arrow-up-right 上拉加载与下拉刷新

#arrow-up-right 云函数路由优化 tcb-router

一个用户在一个云环境只能创建 50 个云函数

假如小程序非常复杂,50 个云函数不能够满足业务需求怎么办?

相似的请求归类到同一个云函数处理

tcb-router 是一个 koa 风格的云函数路由库

通俗理解就是可以把很多个接口归类到同一个云函数内。

github-tcb-router: https://github.com/TencentCloudBase/tcb-router(opens new window)arrow-up-right

koa 洋葱模型...

安装:

代码:

上面 tcb-router 代码会按照洋葱模型执行,即先从上往下逐个进入中间件,再从下往上逐个退出中间件。

#arrow-up-right 本地存储(缓存)

#arrow-up-rightapi 设置 title

#arrow-up-right 背景播放音

BackgroundAudioManager (opens new window)arrow-up-right 全局唯一的背景音频管理器

代码:

#arrow-up-rightcreateSelectorQuery 查询节点信息

createSelectorQuery (opens new window)arrow-up-right 小程序的方法,用于查询节点等操作

#arrow-up-right 组件内的方法

Component(Object object)(opens new window)arrow-up-right

#arrow-up-right 组件生命周期

lifetimes(opens new window)arrow-up-right

#arrow-up-right 组件所在页面的生命周期

#arrow-up-right 组件对数据的监听

observers(opens new window)arrow-up-right

#arrow-up-right 子组件自定义事件传递给父组件

#arrow-up-right 父组件自定义事件传递给子组件

#arrow-up-right 兄弟组件间传递事件和传值

#arrow-up-right 获取手机信息

wx.getSystemInfo(Object object)(opens new window)arrow-up-right

#arrow-up-right 滚动组件

scroll-view(opens new window)arrow-up-right

#arrow-up-right 全局属性、方法(类似 vuex)

#arrow-up-right 消息提示框

showToast(opens new window)arrow-up-right

#arrow-up-right《发现》页面

#arrow-up-right 调用组件外部的样式

components 内部的组件无法直接调用外部的样式。可通过以下方式调用组件外部样式:

方法一:

方法二:

消除样式隔离(opens new window)arrow-up-right

#arrow-up-right 组件插槽 slot

单个插槽

如果需要实现多个插槽

#arrow-up-right 判断用户授权

授权(opens new window)arrow-up-right

#arrow-up-rightbutton 的开发能力(获取用户信息)1

#arrow-up-right 原生组件

原生组件(opens new window)arrow-up-right

#arrow-up-right 选择上传图片

上传图片(opens new window)arrow-up-right

#arrow-up-right 图片裁剪

图片裁剪(opens new window)arrow-up-right

#arrow-up-right 获取标签自定义属性 data-* (删除图片的实现)

#arrow-up-right 全屏预览图片 (点击图片放大预览)

全屏预览图片(opens new window)arrow-up-right

#arrow-up-right 文件上传云存储(发布博客例子)

文件上传云存储(opens new window)arrow-up-right

#arrow-up-rightjs 模块化 (时间格式化)

在目录 utils 中新建 formatTime.js 文件

在组件引入 js 模块

#arrow-up-right 阻止事件冒泡

bindcatch 都可以绑定事件,它们的区别是 bind 有事件冒泡,而 catch 没有

#arrow-up-right 返回上一个页面并执行方法

API(opens new window)arrow-up-right

#arrow-up-right 图片懒加载

API(opens new window)arrow-up-right

懒加载占位图可以给 image 设置背景图或背景色

#arrow-up-right 模糊查询

#arrow-up-right 提升模糊查询的效率 (添加索引,对数据量大的查询效果明显)

云开发控制台 > 数据库相应的集合 > 索引管理 > 添加索引 > 输入自定义索引名称、该字段的值是否唯一、被查询的字段名、升序/降序 > ok

#arrow-up-right 小程序端调用云数据库

一般调用云数据库的操作都写在云函数内,其实小程序端也可以对数据库进行操作。

小程序端一次最多只能查询 20 条数据,云函数端最多可查询 100 条数据,可使用多次查询拼接的方式突破限制。

#arrow-up-right 云数据库权限管理

注意:云控制台和服务端(云函数)始终有所有数据读写权限,

但权限的管理仅对小程序端发起的请求有效。

  • 仅创建者可写,所有人可读 (适合于文章)

  • 仅创建者可读写 (适用于私密内容)

  • 仅管理端可写,所有人可读(适用于商品信息)

  • 仅管理端可读写(适用于后台敏感数据)

#arrow-up-right 数据库中 1 对 N 关系的三种设计方式

#arrow-up-right 第一种:N 的数量较少 几十个以内

1 条记录存储 N 个子数据

如一条博客中,最多有 9 张图片,这 9 张图片可和其他数据放在一个记录中。

#arrow-up-right 第二种:N 的数量较多 几十到几百个

1 存储 每个 N 的 id

可分两个数据库集合,

一个为 ' 目录 ' 集合,存放 ' 详情 ' 集合下的每条数据的 id 目录

一个为 ' 详情 ' 集合,每条数据对应一个单独的 id 和 详细数据

如歌单列表,与歌曲详情的数据组合设计。

#arrow-up-right 第三种:N 的数量巨大 几百成千上万个

每个 N 都存储 1 的 id

如新浪博客中的一条博客下面有几千条评论

#arrow-up-right 云调用

通过云函数调用服务端的开发接口

这些接口如:模板消息推送、生成小程序码...

#arrow-up-right 模板消息推送

1、使用 from 表单才能触发消息推送,并设置 report-submit="true"

2、需要到微信公众平台做相应的设置:

微信公众平台 > 功能 > 模板消息 > 添加模板 > 选择相应的模板> 添加成功后会有一个模板 ID

3、新建一个云函数,用于云调用。在该云函数下新建配置文件:config.json ,用于配置权限

config.json :

云函数设置消息推送:

4、在提交表单事件完成后调用消息推送云函数

#arrow-up-right 云函数多集合查询数据库

#arrow-up-right 分享功能

分享功能需要 button 标签,设置 open-type="share"

在 js 中有 onShareAppMessage 方法,点击 button 会自动执行此方法

#arrow-up-right 不同场景获取用户信息的方式

#arrow-up-right 场景一:只想在界面上显示自己的昵称和头像

以组件的方式:根据 type 类型获取不同用户数据

该方式不需要授权,只能用于在 wxml 显示自己的信息

open-data(opens new window)arrow-up-right

#arrow-up-right 场景二:在 JS 中获取用户信息

该方式要在用户授权以后才能获取用户信息

wx.getUserInfo(opens new window)arrow-up-right

在未授权的情况下需要用户先授权:

注意:上面这种方式没有获取到 openId

#arrow-up-right 场景三:获取 openId

获取 openId 不需要用户授权

1、传统开发方式获取 openId,后台服务器由自己开发,没使用云开发

小程序端 微信服务器 后端服务器

步骤:

小程序端 调用 wx.login 向微信服务器 获取 code

小程序端 调用 wx.request 将 code 传递给 后端服务器

后端服务器 使用 code 向微信服务器 换取 openid 和 session_key

后端服务器 将 openid 发送给 小程序端

2、云开发方式获取 openId

云函数 login 中

普通按钮

openid 在小程序和公众号下是不一样的

unionid 在小程序和公众号下都是一样的

#arrow-up-right《我的》页面

json 文件

#arrow-up-right 导航页面链接跳转

navigator(opens new window)arrow-up-right

#arrow-up-right 背景图片

wxss 背景图片不支持本地相对路径的图片,只支持网络图片和 base64 图片

建议使用 base64 图片,图片文件最好不要太大。

#arrow-up-right 每个页面都有的 page 标签

#arrow-up-right 播放历史与本地存储

方案一:播放历史存储在数据库当中,这样在不同设备访问都可查看播放历史。读取速度相对较慢

方案二:播放历史存储在本地,仅当前设备可查看播放历史。读取速度较快

本项目采用本地存储:

使用 openid 作为本地存储的 key,播放历史存入 value

在 app.js 中获取 openid,即打开小程序就获取 openid。

歌曲播放时

播放历史页面获取

#arrow-up-right 我的发现

代码分别演示了从云函数和小程序端获取数据,从小程序端获取数据享有权限管理的能力,不需要传 openid。

#arrow-up-right 小程序码

获取小程序码(opens new window)arrow-up-right

本项目演示使用 接口 B:适用于需要的码数量极多的业务场景 (opens new window)arrow-up-right云调用 的方式。

步骤:

  • 创建云函数 gteQRCode

  • gteQRCode 云函数下创建 config.json 配置权限,代码如下:

入口函数:

#arrow-up-right 判断是从扫码小程序码进入,以及参数获取

#arrow-up-right 版本更新检测

#arrow-up-right 性能优化

官网文档优化建议(opens new window)arrow-up-right

使用开发者工具的调试器,Audits 进行评分,然后根据提示针对项目进行优化。

#arrow-up-right 场景值 scene 的作用与应用场景

场景值(opens new window)arrow-up-right

场景值用来描述用户进入小程序的路径。完整场景值的含义请查看 场景值列表 (opens new window)arrow-up-right

可根据不同场景进入实现不同业务处理,比如一个点餐小程序,店家内贴了小程序码,用户通过扫码进入,可立即进入点餐页面,等等

在 app.js 中的 onLaunch(options) 、onShow(options),options 包含 scene 场景值

开发者工具中,切后台,可模拟进入场景。

#arrow-up-right 小程序的 "SEO"--- 页面收录 sitemap

在 app.js 的同级目录下有 sitemap.json 文件,用于配置收录规则

stiemap配置(opens new window)arrow-up-right

作用:

使小程序搜索可根据小程序的内容进行搜索到

使用方法:

1、在微信公众平台,小程序信息 > 页面收录设置 > 打开 (默认是已开启)

2、打开 sitemap.json 文件,配置收录规则

更多键值:

#arrow-up-right 小程序上线审核流程

微信公众平台,版本管理>把小程序上传为体验版》提交审核》上线

#arrow-up-right 后台管理系统

#arrow-up-right 架构示意图

前端 后台 小程序云开发

vue-admin-template <--- 通过 ajax--> 基于 Koa2;HTTP API 或 tcb-admin-node ---->云函数、云数据库、云存储

#arrow-up-rightvue-admin-template 构建管理系统前端

vue-element-admin (opens new window)arrow-up-right 基于 element 的后台管理系统模板

vue-admin-template (opens new window)arrow-up-rightvue-element-admin (opens new window)arrow-up-right 的简化版

使用方法查看官方文档。

#arrow-up-rightKoa2 构建管理系统后端

官网: https://koa.bootcss.com/(opens new window)arrow-up-right

新建空文件夹 wx-music-admin-backend,打开终端:

app.js:

终端:

#arrow-up-right 接口调用凭证 access_token 的缓存与更新

access_token,微信的接口调用凭证,详情:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html(opens new window)arrow-up-right

回到项目 wx-music-admin-backend,打开终端:

代码:

#arrow-up-right 后端代码通过 HTTP API 触发云函数获取数据

HTTP API 触发云函数(opens new window)arrow-up-right

#arrow-up-right 产生跨域和后端解决跨域问题

管理系统前端向管理系统后端请求数据,产生了跨域问题

管理系统后端,安装

app.js

#arrow-up-right 云数据库的增删改查接口

数据库查询记录(opens new window)arrow-up-right

#arrow-up-right 后端获取前端 post 请求传来的数据

get 请求可以直接通过 ctx.request.query 获取,但是 post 请求需要安装 koa-body

app.js

接口.js

#arrow-up-right 后端获取云存储图片

云存储中上传图片,云数据库中新建图片的集合,并添加数据字段,字段包含云文件的 fileid。

后端项目通过调用云数据库的方式获取数据

但获取到的数据为 fileid,并不能用于显示图片,需要通过微信 HTTP API 获取云存储的接口来获取图片地址

获取云存储(opens new window)arrow-up-right

#arrow-up-right 后端上传图片到云存储

文件上传arrow-up-right

Last updated