上手微信小程序开发
小程序的css和js和其他前端项目一样,只是HTML换成了WXML标签,故而小程序的本质就是网页。
小程序和网页的区别是:小程序使用的是小程序内提供的API故而小程序不支持浏览器。
入门
优势
基于微信,故而可以调用微信的API比如拍照、支付、登录注册等,无需考虑平台差异因为微信小程序基于微信平台。
前置知识
- js
- css
开发准备
- 到微信公众平台注册申请一个appid,得到一个appid和appsecret。
- 下载微信提供的小程序开发工具,用于运行和调试。
上手
这里不使用微信新建小程序的功能,手动从头到尾写一下小程序的结构。
- 新建项目目录比如hello
- 新建app.js文件
1 | // 新建一个小程序实例,可以传入一个配置对象 |
- 新建配置文件app.json,记录了一些配置。
1 | { |
其中 "pages/home/home"
中的pages存放所有的页面,每一个页面都有自己的目录,这里的页面的目录名是第一个home,小程序会加载页面目录下的home.js文件(扩展名可以省略),故而这个目录表示小程序加载pages目录下的home页面下的home.js文件,home.js文件名可以随便起名。
- 新建home页面目录和下面的home.js文件
1 | mkdir -p pages/home |
1 | // Page()方法由小程序提供用于初始化一个页面实例,参数是一个配置对象 |
- 在
pages/home
下新建一个home.wxml文件,wxml是类似于html的微信页面标记语言。
1 | hello world |
- 打开微信小程序开发工具,导入hello项目。
WXML语言
wxml文件类似于html文件,也是在里面写各种标记语言。
不过使用的是微信小程序提供的wxml的标签。
常用标签:
- view:表示一个区块,用于区别其他区块,类似于div
- text:表示一段inline文本,类似span
项目结构
|- app.json
|- app.js
|- pages
|- home
|- home.wxml
|- home.js
所有的小程序都是类似上面的结构。
项目配置文件
app.json是小程序项目的全局配置文件。
app.json中还有window属性,用于设置小程序的窗口。
1 | { |
除此之外,app.json还可以配置各种组件,比如选项卡。
样式
全局样式
小程序允许在项目根目录防止一个app.wxss文件,他是一个全局样式文件,里面写css。
1 | /* 页面选择器 */ |
flex布局
官方推荐使用flex布局。
如果要书写局部样式,比如要对pages/home这个页面写一个专门的样式文件,则需要在该目录下新建home.wxss文件,该文件的样式只对于home页面生效。
home页面的flex布局:
1 | page { |
weui
腾讯提供了一套ui框架叫weui。
weui demo:weui.io
weui的小程序版本是weui-wxss。
使用weui-wxss:
- 将weui.wxss文件复制到app.wxss头部。
- 给wxml文件加上weui-wxss的class,类似bootstrap。
1 | <view> |
用到什么class就查文档。
轮播图
1 | <view> |
加入脚本
数据绑定
就是脚本里面的某些数据,可以自动成为页面的全局变量,两者绑定,也就是MVVM。
1 | Page({ |
home页面可以自动读取上面的data。
绑定到页面中:
1 | <view> |
如果需要在js中读取data中的变量则需要这样写:this.data.name
全局变量
数据绑定只对于当前页面有效,如果需要页面之间共享数据则需要写入全局配置中。
1 | App({ |
现在全局变量配置好了,在页面中获取变量:
1 | // getApp方法用于获取app实例 |
事件
小程序常用事件:
- tap:触摸后离开
- longpress:长按,超过350ms触发
- touchstart:触摸开始
- touchmove:触摸后移动
- touchcancel:触摸后被打断
- touchend:触摸结束
事件的传播分两个阶段:捕获(从外层元素到内层元素捕获),然后是冒泡(从内层元素到外层元素传播),故而一个事件在同一个元素会触发两次。
小程序允许指定元素的触发阶段,方法是为事件属性名加上下面的前缀:
- capture-bind:捕获阶段触发。
- capture-catch:捕获阶段触发,并中断事件,不再向下传播,即中断捕获阶段,并取消随后的冒泡阶段。
- bind:冒泡阶段触发。
- catch:冒泡阶段触发,并取消事件进一步向上冒泡。
1 | <view> |
1 | Page({ |
动态提示Toast
小程序使用Toast给用户提示。
1 | Page({ |
对话框Modal
使用wx.showModal()
可以新建一个对话框。
1 | Page({ |
API
WXML渲染语法
1 | Page({ |
wxml中遍历items:
1 | <view> |
客户端数据存储
小程序允许将一部分数据保存在客户端(微信)中,方便读取。
本地存储(同步):wx.setStorageSync(key, value)
本地读取(同步):wx.getStorageSync(key)
客户端存储主要用于缓存不重要的数据。
远程数据请求
发布出去的小程序所请求的服务器域名都是要事先登记的,但是开发阶段没有限制(需要在本地设置里面勾选)。
请求:wx.request({})
,参数是一个配置对象。
open-data组件
<open-data></open-data>
组件可以在页面上显式用户的身份信息。
1 | <view> |
其他信息类型:
- userNickName:用户昵称
- userAvatarUrl:用户头像
- userGender:用户性别
- userCity:用户所在城市
- userProvince:用户所在省份
- userCountry:用户所在国家
- userLanguage:用户的语言
获取用户个人信息
获取用户个人信息需要得到授权,可以通过按钮获取用户授权。
wxml代码:
1 | <view> |
js代码:获取用户信息
1 | Page({ |
页面跳转
页面跳转的wxml方法:
小程序每个页面的路径都要放在配置文件app.json中的pages属性中。
pages数组第一个页面是小程序打开时默认展示的页面。
小程序页面之间通过navigator
标签,url属性实现跳转。
页面跳转的js方法:
使用wx.navigateTo()
方法,传入一个配置对象。
参考
- 微信小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/
- 微信小程序开发指南:https://developers.weixin.qq.com/ebook?action=get_post_info&docid=0008aeea9a8978ab0086a685851c0a
- https://www.ruanyifeng.com/blog/2020/10/wechat-miniprogram-tutorial-part-one.html
- https://www.ruanyifeng.com/blog/2020/10/wechat-miniprogram-tutorial-part-two.html
- https://www.ruanyifeng.com/blog/2020/10/wechat-miniprogram-tutorial-part-three.html
- https://www.ruanyifeng.com/blog/2020/11/wechat-miniprogram-tutorial-part-four.html
- 小程序面试题:https://vue3js.cn/interview/applet/applet.html