【笔记】微信小程序学习笔记
前言
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。(百度百科)
注册
邮箱要填写未被微信公众平台注册,未被微信开放平台注册,未被个人微信号绑定的邮箱
登陆
- 在
设置
找到AppID(小程序ID)
记下
安装
新建项目
- 如果只是测试,可以不写
AppID(小程序ID)
,如果开发后发布,要写AppID(小程序ID)
目录结构
1 | + pages // 存放每个页面文件的目录 |
页面组件
页面样式
- WXSS书写规则与CSS一致
单位换算
- rpx是小程序特有的长度单位,会随着屏幕宽度的变化而变化
- 750px宽的屏幕下,px和rpx的比例是
1:1
- 公式:
屏幕宽rpx = 750rpx * 元素宽度 / 屏幕宽px
页面函数
page.js
1 | const app = getApp(); // 调用app.js文件 |
页面配置
全局函数
App()
函数实例化了一个小程序对象
app.js
1 | App({ |
getApp()
获取小程序实例对象
app.js
1 | const app = getApp(); |
全局配置
navigationBar
:顶部导航栏区域background
:下拉加载区域page
:正文区域
app.json
1 | { |
project.config.json项目配置文件
sitemap.json微信搜索配置
页面路由
open-type=""
:页面跳转方式
navigateTo
:打开新页面。只可以跳转非tabBar页面(当前页面在栈中保留,新页面进栈)navigateBack
:页面返回。页面返回设定的url需要改为原页面路径。在返回的过程中,不会触发onLoad(),因为它已经在页面栈中保存了,但是会触发onShow()(将当前页面移出页面栈,)switchTab
:打开新页面。只可以跳转tabBar页面(将所有页面移出页面栈,保留要跳转的tabBar页面)reLaunch
:打开新页面。可以跳转任意页面rediirect
:页面重定向。(当前页面出栈,新页面进栈)
url=""
:跳转页面的路径,只能是相对路径name=""
:携带自定义参数,可以在onLoad()通过options属性调用
page.wxml
1 | <navigator open-type="navigateTo" url="../logs/logs"></navigator> |
模块化
- 采用nodejs的方式,exports或module.exports进行暴露,require进行获取
视图层
数据绑定
- 采用插值表达式(胡子语法)
key
:动态获取的数据
page.js
1 | Page({ |
page.wxml
1 | <view>{{key}}</view> |
数据获取和修改
key
:自定义的数据
page.js
1 | Page({ |
列表渲染
arr
:列表数据
page.js
1 | Page({ |
wx:for-index="index"
:定义当前变量的索引值,默认值为indexwx:for-item="item"
:定义当前变量的变量名,默认值为itemwx:key=""
:指定列表中项目的唯一的标识符,如果不指定会报警告
page.wxml
1 | <view wx:for="{{arr}}" id="{{index}}"> |
条件渲染
page.js
1 | Page({ |
page.wxml
1 | <view wx:if="{{key=='a'}}">a</view> |
隐藏属性
page.wxml
1 | <view hidden="true"></view> |
所有组件在指定属性时,如果没有指定属性值,则默认为值true
模版
- 使用模版组件定义代码片段,可以在任意地方调用模版
name=""
:定义模版时指定的名字
page.wxml
1 | <template name=""> |
is=""
:调用模版,指定对应的模版名。也可以通过三元运算表达式,判定使用哪个模版data="""
:指定需要传入的数据
page.wxml
1 | <template is="" data=""> |
事件
点击事件
- bind事件会向上冒泡
page.wxml
1 | <view bindtap="method"></view> |
- catch事件不会向上冒泡
page.wxml
1 | <view catchtap="method"></view> |
- 在wxs文件中定义函数主体
page.js
1 | Page({ |
传递参数
data-value="value"
:传递参数
page.wxml
1 | <view bindtap="method" data-value="value"></view> |
page.js
1 | Page({ |
组件
视图容器组建
- 类似html中的div标签
hover-class="method"
:鼠标点击后一闪而过的效果
page.wxml
1 | <view></view> |
page.wxss
1 | .method { |
文本组件
user-select="false"
:文本是否可选decode="false"
:文本是否解码转义字符
page.wxml
1 | <text></text> |
图片组件
- 默认尺寸320px*240px
src=""
:图片引入地址,小程序发布不允许超过2M,所以不建议图片本地化,要求使用网络地址mode=""
:图片裁剪缩放模式
scaleToFill
:填充aspectFit
:等比例缩放,同时保证长边完全显示,超出部分进行截取(谁先缩放到设定的值,谁就是长边)aspectFill
:等比例缩放,同时保证短边完全显示,超出部分进行截取(谁后缩放到设定的值,谁就是短边)widthFix
:等比例缩放,在保证不超出宽度的同时,高度自动变化heightFix
:等比例缩放,在保证不超出高度的同时,宽度自动变化
page.wxml
1 | <image></image> |
按钮组件
- 默认带阴影
size=""
:按钮的大小
default
:缺省值,默认大小mini
:小尺寸
type=""
:按钮的类型
primarg
:绿色default
:缺省值,白色warn
:红色
plain="false"
:按钮是否镂空,背景透明disabled="false"
:按钮是否禁用loding="false"
:按钮前是否带loding图标form=type=""
:触发表单事件
submit
:提交表单reset
:重置表单
open-type=""
:微信开放能力
contact
:打开客服对话share
:触发转发功能,不能转发朋友圈getPhoneNumber
:获取用户手机号(回调函数获取)getUserInfo
:获取用户信息(回调函数获取)openSetting
:打开授权设置页(只能管理已询问的授权)feedback
:打开意见反馈
page.wxml
1 | <button></button> |
获取用户信息
- 需要在回调函数getuserinfo()中获取
page.wxml
1 | <button open-type="getUserInfo"></button> |
page.js
1 | Page({ |
获取用户手机号
- 需要在回调函数getnumber()中获取
page.wxml
1 | <button open-type="getPhoneNumber"></button> |
page.js
1 | Page({ |
多选框组件
value=""
:checkbox标识,选中时触发change事件,并携带value值disabled="false"
:是否禁用checked="false
:是否选中color="rgba(255,255,255,1)"
:多选框颜色
page.wxml
1 | <checkbox-group bindchange="changefn"> |
page.js
1 | Page({ |
单选框组件
value=""
:redio,选中时触发change事件,并携带value值disabled="false"
:是否禁用checked="false
:是否选中color="rgba(255,255,255,1)"
:单选框颜色
page.wxml
1 | <redio-group bindchange="changefn"> |
page.js
1 | Page({ |
滑块视图容器(轮播图)
indicator-dots="false"
:是否显示指示点indicator-color="rgba(255,255,255,1)"
:指示点颜色(未选中)indicator-active-color="rgba(255,255,255,1)"
:指示点颜色(已选中)autoplay="false"
:是否自动切换current="0"
:当前所在滑块的索引interval="5000"
:自动切换时间间隔,单位毫秒duration="500"
:滑动动画时长,单位毫秒circular="false"
:是否采用首尾衔接滑动certical="false"
:滑动方向是否为纵向easy-function=""
:动画类型
default
:缺省值,缓动函数linear
:线性动画easeInCubic
:缓入动画easeOutCubic
:缓出动画easeInOutCubic
:缓入缓出动画
page.wxml
1 | <swiper> |
索引改变事件
bindchange=""
:current改变时会触发的change事件
page.wxml
1 | <swiper bindchange="changefn"> |
page.js
1 | Page({ |
自定义属性
- 在组件中使用自定义属性
data-
:使用这个前缀的属性为自定义属性index
:自定义名称
page.wxml
1 | <view data-index="0" bindtap="tapfn"><view> |
page.js
1 | Page({ |
自定义组件
创建组件库
在
pages
目录下创建名为compomemts
的目录,用于存放自定义组件右键创建好的目录->点击
创建Component
->创建与目录名同名的Component
配置组件
component.json
1 | { |
component.js
1 | Component({ |
引用组件
page.json
1 | { |
page.wxml
1 | <component></component> |
组件传值
父组件传值给子组建
key
:自定义属性名value
:需要传递的值
page.wxml
1 | <component key="value"></component> |
component.js
1 | Component({ |
component.wxml
1 | <view>{{key}}</view> |
子组建传值给父组件
component.wxml
1 | <button bindtap="click">按钮</button> |
component.js
1 | Component({ |
binde
:bind+自定义事件名
page.wxml
1 | <component binde="efn"></component> |
page.js
1 | Page({ |
获取标签内容
- 通过slot组件(插槽、占位符)在自定义组件中,获取父组件定义的内容渲染在子组件
page.wxml
1 | <component> |
component.wxml
1 | <slot></slot> |
使用第三方组件
初始化项目
- 在项目根目录执行npm初始化命令
1 | npm init -y |
- 下载第三方组件(这里以vant-weapp框架)
1 | npm i @vant/weapp -S --production |
小程序开发者工具
->工具
->构建npm
开启项目node支持
小程序开发者工具
->右上角详情
->本地设置
->勾选使用npm模块
project.config.json
1 | { |
引入node模块
通过绝对路径引入
page.json
1 | { |
通过相对路径引入
page.json
1 | { |
创建第三方组件
网络请求
page.js
1 | Page({ |
踩坑
- 报错:
http://127.0.0.1 不在以下 request 合法域名列表
解决问题
微信小程序开发者工具
->右上角详情
->本地设置
->勾选不校验合法域名、wev-view(业务域名)、TLS版本以及HTTPS证书
proect.config.json
1 | { |
微信登陆
app.js
1 | App({ |
用户授权
scope
:指定授权的权限名
userInfo
:用户信息userLocation
:地理位置userLocationBackground
:后台定位werun
:微信运动步数record
:录音功能writePhotosAlbum
:保存到相册camera
:摄像头
app.js
1 | App({ |
获取授权状态
app.js
1 | App({ |
获取用户信息
- 获取用户所有信息案例
app.js
1 | App({ |
转发
page.wxml
1 | <button open-type="share"></button> |
page.js
1 | Page({ |
定位
获取位置信息
得到用户授权才可以使用,如果没有授权,会自动弹出授权提示
配置弹窗说明
app.json
1 | { |
app.js
1 | App({ |
使用内置地图标记
app.js
1 | App({ |
媒体
视频
page.wxml
1 | <video id=""></video> |
page.js
1 | Page({ |