概述:微信小程序
[TOC]
1.全局配置app.json
帮助文档:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html
(1)”pages”字段:表示页面路径
第一个页面路径则为小程序默认展示页面,可利用在其中新建一个页面路径,则会自动生成新的页面文件夹(包含js/json/wxml/wxss)
(2)”window”字段:全局的默认窗口表现
定义小程序所有页面的顶部背景颜色和文字颜色等
例如:
“enablePullDownRefresh”:true表示是否全局开启下拉刷新功能
“backgroundTextStyle”: “dark”表示下拉刷新为暗灰色样式
2.sitemap 配置
根目录下的sitemap.json用于配置小程序及其页面是否允许被微信索引,如果没有 sitemap.json
,则默认为所有页面都允许被索引
(未发布的小程序无效)
3.模板语法
帮助文档:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/data.html
1 | 页面.js中data内声明变量 |
1 | 页面.wxml中使用指定变量 |
备注:data中声明变量可用于设置标签属性,不过花括号与变量名间不得有空格
(1)三元运算
1 | <view hidden="{{flag ? true : false}}"> Hidden </view> |
(2)列表循环
操作方式1
1 | <view wx:for="{{mylist}}" wx:for-item="mylist" wx:for-index="index"> |
其中wx:for是指data中声明的数组/对象变量名;wx:for-item表示本次循环项的名称;wx:for-index表示本次循环的索引,在内部迭代时使用本次循环项的名称操作
操作方式2:wx:key绑定一个普通字符串,而且该字符串为数组中对象唯一属性,例如对象中id为唯一不重复,该目的是用于提升列表渲染性能
1 | <view wx:for="{{mylist}}" wx:for-item="mylist" wx:for-index="index" wx:for="id" > |
操作方式3:若针对传统普通的数组,例如foods=[‘milk’,’eggs’,’apple’],在wx:for-key设置为*this
1 | <view wx:for="{{foods}}" wx:for-item="mylist" wx:for-index="index" wx:for-key="*this"> |
备注:仅单层循环时wx:for-item=”item”和wx:for-index=”index”为默认,可省略
操作方式4:对象循环
1 | <view wx:for="{{persons}}"> |
建议改成key-value,且会提示未添加wx:key的警告,建议添加其中一个属性:
1 | <view wx:for="{{persons}}" wx:for-item="value" wx:for-index="key" wx:for="id"> |
(3)条件渲染
1.if、elif、else
1 | <view> |
2.hidden
1 | <view> |
对于以上两种用法,建议:
(1)标签不频繁切换优先使用wx:if
(2)标签频繁切换优先使用hidden
(4)事件绑定
1.wxml点击事件触发(按钮事件)
1 | <view bindtap='choose'>//其中choose为函数名 |
1 | choose:function(){ |
2.将wxml的变量值传入js(获取输入框的值)
使用Input传入时是“bindinput”关键字触发
1 | <input type="text" bindinput="abc"></input> |
1 | abc:function(e){ |
3.将不同参数传入同一函数(按钮事件+形参)
1 | <button bindtap="handle" data-operation="{{1}}"> + </button> |
读取data-operation:
1 | handle:function(e){ |
※ 可通过调试器中的AppData查看变量名及对应的值
(5)变量赋值
访问时需要前置this
1 | Page({ |
4.样式WXSS
(1)组件尺寸
(1)推荐rpx,可以根据使用设备
(2)其他尺寸单位:px和%等
(2)样式导入
wxss对于相同文件名自动导入,还可以使用less中的导入混合
使用@import语句导入外联样式表(仅支持相对路径)
1 | 路径如下: |
1 | 在demo.wxss中 |
(3)选择器
※ 解释选择器:CSS选择器用于选择指定元素样式的模式,个人解释对某组件选择时的样式变化(eg.选择未访问链接时颜色及下划线等,访问后的颜色变化等)。
小程序不支持通配符*,例如以下代码:
1 | *{ |
目前支持的选择器有:
选择器 | 样例 | 样例描述 |
---|---|---|
.class | .intro |
选择所有拥有 class=”intro” 的组件 |
#id | #firstname |
选择拥有 id=”firstname” 的组件 |
element | view |
选择所有 view 组件 |
element, element | view, checkbox |
选择所有文档的 view 组件和所有的 checkbox 组件 |
::after | view::after |
在 view 组件后边插入内容 |
::before | view::before |
在 view 组件前边插入内容 |
(4)less
定义:less类似于编写css的框架,可以在其中定义相关变量以及嵌套编写代码,可自动转换为相应的css,同时less支持导入less功能(@import 语句)。
eg.
1 | demo.less: |
自动转换为对应的css:
1 | text{ |
远程小程序不支持less,其他基于小程序的框架基本支持,例如wepy、mpvue、taro等。
若仅使用less而采用框架是不可取的,可以使用以下方式:
(1)使用编辑器vscode
(2)安装插件easy less
(3)在vscode设置加入
1 | "less.compile":{ |
(4)在编写样式地方新建*.less文件,正常编辑即可。
5.常见组件
(1)view——视图容器
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
hover-class | string | none | 否 | 指定按下去的样式类。当 hover-class="none" 时,没有点击态效果 |
1.0.0 |
hover-stop-propagation | boolean | false | 否 | 指定是否阻止本节点的祖先节点出现点击态 | 1.5.0 |
hover-start-time | number | 50 | 否 | 按住后多久出现点击态,单位毫秒 | 1.0.0 |
hover-stay-time | number | 400 | 否 | 手指松开后点击态保留时间,单位毫秒 | 1.0.0 |
Tip:滚动式图——scroll-view
1 | <view class="container"> |
(2)text——文本标签
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
selectable | boolean | false | 否 | 文本是否可选 | 1.1.0 |
space | string | 否 | 显示连续空格 | 1.4.0 | |
decode | boolean | false | 否 | 是否解码 | 1.4.0 |
1 | <text selectable>The Text Area</text> |
(3)image——图片标签
微信小程序对图片容量有限制,一般建议使用网络图片。
本地图片->网络图片:https://images.ac.cn/(帮助工具——图床)
相关属性:
string src:图片的 URL。v2.11.0 起支持传递 base64 Data URI
number width:图片的真实宽度
number height:图片的真实高度
function onload:图片加载完成后触发的回调函数
function onerror:图片加载发生错误后触发的回调函数
(4)swiper——滑块视图容器
※ 使用轮播(Swiper)时注意要将app.wxss需要设置(不然图片无法显示):
1 | /* align-items: center; */ |
(1)轮播图外层容器:swiper
(2)每一个轮播项:swiper-item
1 | <swiper> |
※ swiper宽度默认100%;高度默认150px;图片默认尺度:320×240。
调整图片时可以考虑查看图片宽高后调整swiper宽高:
例如原图1125×353px,swiper宽度/swiper高度=原图宽度/原图高度
swiper高度=swiper宽度×原图高度/原图宽度
其中宽度为100%或750rpx或100vw
height = 100vw*352/1125
在*.wxss中设置swiper样式
※ 在wxss中不能实现数学运算,可以通过源生的calc函数完成
1 | swiper{ |
主要属性:
(1)自动轮播:autoplay
(2)轮播时间:interval(单位毫秒)
(3)衔接模式:circular
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
indicator-dots | boolean | false | 否 | 是否显示面板指示点 | 1.0.0 |
indicator-color | color | rgba(0, 0, 0, .3) | 否 | 指示点颜色 | 1.1.0 |
indicator-active-color | color | #000000 | 否 | 当前选中的指示点颜色 | 1.1.0 |
autoplay | boolean | false | 否 | 是否自动切换 | 1.0.0 |
current | number | 0 | 否 | 当前所在滑块的 index | 1.0.0 |
interval | number | 5000 | 否 | 自动切换时间间隔 | 1.0.0 |
duration | number | 500 | 否 | 滑动动画时长 | 1.0.0 |
circular | boolean | false | 否 | 是否采用衔接滑动 | 1.0.0 |
vertical | boolean | false | 否 | 滑动方向是否为纵向 | 1.0.0 |
previous-margin | string | “0px” | 否 | 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值 | 1.9.0 |
next-margin | string | “0px” | 否 | 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值 | 1.9.0 |
display-multiple-items | number | 1 | 否 | 同时显示的滑块数量 | 1.9.0 |
skip-hidden-item-layout | boolean | false | 否 | 是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息 | 1.9.0 |
easing-function | string | “default” | 否 | 指定 swiper 切换缓动动画类型 | 2.6.5 |
bindchange | eventhandle | 否 | current 改变时会触发 change 事件,event.detail = {current, source} | 1.0.0 | |
bindtransition | eventhandle | 否 | swiper-item 的位置发生改变时会触发 transition 事件,event.detail = {dx: dx, dy: dy} | 2.4.3 | |
bindanimationfinish | eventhandle | 否 | 动画结束时会触发 animationfinish 事件,event.detail 同上 | 1.9.0 |
(5)navigator——导航组件
类似于超链接标签
(1)跳转页面:url(绝对路径/相对路径)
1 | <navigator url="/pages/demo/demo">轮播图</navigator> |
※ 设置tabBar的页面需要额外添加属性:
1 | <navigator url="/pages/demo/demo" open-type="switchTab">轮播图</navigator> |
(2)跳转当前小程序/其他小程序:target
self:默认值:个人小程序
miniProgram:其他小程序
(3)跳转方式:open-type
navigate:默认值——保留当前页面(有返回按钮),跳转至另一页面(未设置tabBar的页面)
redirect:关闭当前页面,跳转至另一页面(无返回按钮)(未设置tabBar的页面)
switchTab:跳转至tabBar页面,并关闭其他非tabBar页面。
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
ext-class | string | 否 | 添加在组件内部结构的class,可用于修改组件内部的样式 | |
title | string | 否 | 导航标题,如果不提供,则名为center的slot有效 | |
back | boolean | true | 否 | 是否显示返回按钮,默认点击按钮会执行navigateBack,如果为false,则名为left的slot有效 |
delta | number | 1 | 否 | 当back为true的时候有效,表示navigateBack的delta参数 |
background | string | #f8f8f8 | 否 | 导航背景色 |
color | string | 否 | 导航颜色 | |
loading | boolean | 否 | 是否显示标题左侧的loading | |
show | boolean | 否 | 显示隐藏导航,隐藏的时候navigation的高度占位还在 | |
animated | boolean | 否 | 显示隐藏导航的时候是有opacity过渡动画 | |
bindback | eventhandler | 否 | 在back为true时,点击back按钮触发此事件,detail包含delta |
Slot
名称 | 描述 |
---|---|
left | 左侧slot,在back按钮位置显示,当back为false的时候有效 |
center | 标题slot,在标题位置显示,当title为空的时候有效 |
right | 在导航的右侧显示 |
(6)rich-text——富文本标签
将字符串解析成对应标签,类似于vue中v-html功能。
1 | <rich-text nodes="{{html}}"></rich-text> |
对象数组格式举例(demo.js):
1 | html:[ |
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
nodes | array/string | [] | 否 | 节点列表/HTML String | 1.4.0 |
space | string | 否 | 显示连续空格 | 2.4.1 |
(7)button——按钮
size:大小
default:默认大小
min:小尺寸
type:类型
default:灰色
primary:绿色
warm:红色
状态
plain:按钮镂空
loading:读取
1 | <button size="mini">mini按钮</button> |
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
size | string | default | 否 | 按钮的大小 | 1.0.0 |
type | string | default | 否 | 按钮的样式类型 | 1.0.0 |
plain | boolean | false | 否 | 按钮是否镂空,背景色透明 | 1.0.0 |
disabled | boolean | false | 否 | 是否禁用 | 1.0.0 |
loading | boolean | false | 否 | 名称前是否带 loading 图标 | 1.0.0 |
form-type | string | 否 | 用于 form 组件,点击分别会触发 form 组件的 submit/reset 事件 | 1.0.0 | |
open-type | string | 否 | 微信开放能力 | 1.1.0 | |
hover-class | string | button-hover | 否 | 指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果 |
1.0.0 |
hover-stop-propagation | boolean | false | 否 | 指定是否阻止本节点的祖先节点出现点击态 | 1.5.0 |
hover-start-time | number | 20 | 否 | 按住后多久出现点击态,单位毫秒 | 1.0.0 |
hover-stay-time | number | 70 | 否 | 手指松开后点击态保留时间,单位毫秒 | 1.0.0 |
lang | string | en | 否 | 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。 | 1.3.0 |
session-from | string | 否 | 会话来源,open-type=”contact”时有效 | 1.4.0 | |
send-message-title | string | 当前标题 | 否 | 会话内消息卡片标题,open-type=”contact”时有效 | 1.5.0 |
send-message-path | string | 当前分享路径 | 否 | 会话内消息卡片点击跳转小程序路径,open-type=”contact”时有效 | 1.5.0 |
send-message-img | string | 截图 | 否 | 会话内消息卡片图片,open-type=”contact”时有效 | 1.5.0 |
app-parameter | string | 否 | 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 | 1.9.5 | |
show-message-card | boolean | false | 否 | 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示”可能要发送的小程序”提示,用户点击后可以快速发送小程序消息,open-type=”contact”时有效 | 1.5.0 |
bindgetuserinfo | eventhandle | 否 | 用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与wx.getUserInfo返回的一致,open-type=”getUserInfo”时有效 | 1.3.0 | |
bindcontact | eventhandle | 否 | 客服消息回调,open-type=”contact”时有效 | 1.5.0 | |
bindgetphonenumber | eventhandle | 否 | 获取用户手机号回调,open-type=getPhoneNumber时有效 | 1.2.0 | |
binderror | eventhandle | 否 | 当使用开放能力时,发生错误的回调,open-type=launchApp时有效 | 1.9.5 | |
bindopensetting | eventhandle | 否 | 在打开授权设置页后回调,open-type=openSetting时有效 | 2.0.7 | |
bindlaunchapp | eventhandle | 否 | 打开 APP 成功的回调,open-type=launchApp时有效 | 2.4.4 |
1 | <button open-type="getUserInfo" bindgetuserinfo="getUserInfo">getinfo</button> |
1 | getUserInfo(e){ |
open-type 的合法值
值 | 说明 | 最低版本 |
---|---|---|
contact | 打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,具体说明 | 1.1.0 |
share | 触发用户转发,使用前建议先阅读使用指引 | 1.2.0 |
getPhoneNumber | 获取用户手机号,可以从bindgetphonenumber回调中获取到用户信息,具体说明 | 1.2.0 |
getUserInfo | 获取用户信息,可以从bindgetuserinfo回调中获取到用户信息 | 1.3.0 |
launchApp | 打开APP,可以通过app-parameter属性设定向APP传的参数具体说明 | 1.9.5 |
openSetting | 打开授权设置页 | 2.0.7 |
feedback | 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容 | 2.1.0 |
完成客服功能:
(1)在管理后台>开发>开发设置,替换小程序编译器内的appID
(2)在管理后台添加客服微信号
(3)绑定后的客服帐号,可以登录网页端客服 或 移动端小程序客服(扫码) 进行客服沟通。
(8)icon——图标
组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
type | string | 是 | icon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear | 1.0.0 | |
size | number/string | 23 | 否 | icon的大小 | 1.0.0 |
color | string | 否 | icon的颜色,同css的color | 1.0.0 |
1 | <icon type="success" size="60" color="#0094ff"></icon> |
图标类型及大小举例:
1 | Page({ |
(9)radio——单选框
外嵌radio-group
1 | <radio-group bindchange="handleChange"> |
js处理逻辑
1 | handleChange:function(e){ |
(10)checkbox——复选框
外嵌checkbox-group
1 | <checkbox-group> |
1 | list:[ |
(11)自定义组件
类似于页面,一个自定义组件由 json
wxml
wxss
js
4个文件组成。
新建文件夹->新建Component
编写一个自定义组件,首先需要在 json
文件中进行自定义组件声明(将 component
字段设为 true
可将这一组文件设为自定义组件):
1 | { |
例如在pages同级上新建一个components folder后新建Tabs folder内新建Components,如下:
1 | /components |
其他页面(demo)导入自定义组件,在其demo.json文件内:
1 | { |
在demo.wxml中可直接使用
Tab数据、样式举例说明
(1)数据Tabs.js:
数据存放于自定义组件js的data中:
1 | // components/Tabs/Tabs.js |
(2)Tab.wxml
1 | <view class="tabs"> |
(3)Tab.wxss
1 | /* components/Tabs/Tabs.wxss */ |
相关方法:
1.页面.js:存放事件回调函数,存放在data同层级下;
2.组件.js:存放事件回调函数,存放在methods中。
1 | methods: { |
数据传递过程(变量):
1 | 父组件.xwml(Tab.wxml) |
1 | 父组件.js(Tab.js) |
1 | 子组件.wxml(demo.wxml) |
数据传递过程(数组):
1 | 父组件.xwml(Tab.wxml) |
1 | 父组件.js(Tab.js) |
1 | 子组件.wxml(demo.wxml) |
触发事件:triggerEvent(“事件名称”,传递变量)
将对父组件的值传递给子组件:
1 | 父组件.js(Tab.js) |
1 | 子组件.wxml |
1 | 子组件.js |
属性 | 类型 | 是否必填 | 说明 |
---|---|---|---|
properties | Object Map | 否 | 组件的对外属性,属性名到属性设置的映射表 |
data | Object | 否 | 组件的内部数据,与properties一同用于组件的模板渲染 |
observers | Object | 否 | 组件数据字段监听器,用于监听properties和data变化 |
methods | Object | 否 | 组件的方法 |
created | Function | 否 | 组件的生命周期函数,在组件实例刚刚被创建时执行,注意此时不能调用setData |
attached | Function | 否 | 组件的生命周期函数,在组件实例进入页面节点树时执行 |
ready | Function | 否 | 组件的生命周期函数,在组件布局完成后执行 |
moved | Function | 否 | 组件的生命周期函数,在组件实例被移动到节点树另一位置时执行 |
detached | Function | 否 | 组件的生命周期函数,在组件实例被页面节点树移除时执行 |
(12)slot——占位符
(13)scroll-view——可滚动视图区域
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
scroll-x | boolean | false | 否 | 允许横向滚动 | 1.0.0 |
scroll-y | boolean | false | 否 | 允许纵向滚动 | 1.0.0 |
upper-threshold | number/string | 50 | 否 | 距顶部/左边多远时,触发 scrolltoupper 事件 | 1.0.0 |
lower-threshold | number/string | 50 | 否 | 距底部/右边多远时,触发 scrolltolower 事件 | 1.0.0 |
scroll-top | number/string | 否 | 设置竖向滚动条位置 | 1.0.0 | |
scroll-left | number/string | 否 | 设置横向滚动条位置 | 1.0.0 | |
scroll-into-view | string | 否 | 值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素 | 1.0.0 | |
scroll-with-animation | boolean | false | 否 | 在设置滚动条位置时使用动画过渡 | 1.0.0 |
enable-back-to-top | boolean | false | 否 | iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向 | 1.0.0 |
enable-flex | boolean | false | 否 | 启用 flexbox 布局。开启后,当前节点声明了 display: flex 就会成为 flex container,并作用于其孩子节点。 |
2.7.3 |
scroll-anchoring | boolean | false | 否 | 开启 scroll anchoring 特性,即控制滚动位置不随内容变化而抖动,仅在 iOS 下生效,安卓下可参考 CSS overflow-anchor 属性。 |
2.8.2 |
refresher-enabled | boolean | false | 否 | 开启自定义下拉刷新 | 2.10.1 |
refresher-threshold | number | 45 | 否 | 设置自定义下拉刷新阈值 | 2.10.1 |
refresher-default-style | string | “black” | 否 | 设置自定义下拉刷新默认样式,支持设置 `black | white |
refresher-background | string | “#FFF” | 否 | 设置自定义下拉刷新区域背景颜色 | 2.10.1 |
refresher-triggered | boolean | false | 否 | 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发 | 2.10.1 |
bindscrolltoupper | eventhandle | 否 | 滚动到顶部/左边时触发 | 1.0.0 | |
bindscrolltolower | eventhandle | 否 | 滚动到底部/右边时触发 | 1.0.0 | |
bindscroll | eventhandle | 否 | 滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY} | 1.0.0 | |
bindrefresherpulling | eventhandle | 否 | 自定义下拉刷新控件被下拉 | 2.10.1 | |
bindrefresherrefresh | eventhandle | 否 | 自定义下拉刷新被触发 | 2.10.1 | |
bindrefresherrestore | eventhandle | 否 | 自定义下拉刷新被复位 | 2.10.1 | |
bindrefresherabort | eventhandle | 否 | 自定义下拉刷新被中止 | 2.10.1 |
6.小程序生命周期
(1)应用生命周期
属性 | 类型 | 是否必填 | 说明 |
---|---|---|---|
onLaunch | Function | 否 | 监听小程序初始化 |
onShow | Function | 否 | 启动/切前台 |
onHide | Function | 否 | 切后台 |
onError | Function | 否 | 错误监听函数 |
onPageNotFound | Function | 否 | 页面不存在监听函数 |
1 | app.js |
※ 其中onPageNotFound只有当第一个入口页面找不到时才触发
1 | onPageNotFound(){ |
(2)页面生命周期
属性 | 类型 | 说明 |
---|---|---|
data | Object | 页面初始数据 |
onLoad | Function | 生命周期回调——监听页面加载 |
onShow | Function | 生命周期回调——监听页面显示 |
onReady | Function | 生命周期回调——监听页面初次渲染 |
onHide | Function | 生命周期回调——监听页面隐藏 |
onUnload | Function | 生命周期回调——监听页面卸载 |
onPullDownRefresh | Function | 监听用户下拉动作 |
onReachBottom | Function | 页面上拉触底事件 |
onShareAppMessage | Function | 用户点击右上角转发 |
onPageScroll | Function | 页面滚动触发事件 |
onResize | Function | 页面尺寸改变事件(横竖屏时,仅针对tab页面) |
onTabItemTap | Function | 点击tab触发 |
页面生命周期图解
7.小程序第三方框架
(1)腾讯wepy(类似vue)
(2)美团mpvue(类似vue)
(3)京东taro(类似react)
(4)滴滴chameleon
(5)uni-app(类似vue)
8.推荐标准目录结构
目录名 | 功能 |
---|---|
styles | 存放公共样式 |
components | 存放组件 |
lib | 存放第三方库 |
utils | 帮助库 |
request | 接口帮助库 |
9.导入网络图标并设为字体
(1)阿里图标库:https://www.iconfont.cn/
(2)添加喜欢的图标至购物车
(3)图标管理 / 项目 / Font class —-> 查看在线链接,打开网址并复制css代码
(4)新建文件 styles/iconfont.wxss,复制上述css代码
(5)在app.wxss中导入
1 | @import "./styles/iconfont.wxss"; |
(6)具体页面调用(注意两部分组成)
1 | <text class="iconfont icon-dianyingpiao"></text> |
10.*.wxss中使用app.wxss的全局样式
1 | /*app.wxss*/ |
1 | /*index.wxss*/ |
11.发送异步请求的优化方法
通过es6的promise解决
(1)新建request文件夹并新建index.js
1 | index.js |
(2)具体js调用
1 | import { request } from "../../request/index.js"; |
小程序支持es7的async语法
es7是解决回调的最终方案
(1)在小程序的开发工具中,勾选es6转es5
(2)下载facebook的regenerator库的regenertaor/packages/regenerator-runtime/runtime.js
(3)在小程序目录下新建文件夹lib/runtime/runtime.js,拷贝代码
(4)在每一个需要使用async语法的js页面引入(不能全局引入)
1 | import regeneratorRuntime form '../../lib/runtime/runtime' |
12.获取本地存储数据
1 | // 读取本地是否存储数据并请求数据 |
1 | //存储至本地 |
13.点击轮播图放大
1 | //点击图片触发事件 |
14.获取收货地址
1 | handleChooseAddress(){ |
当用户点击取消时,再次点击可以重新唤起,解决方案:
(1)获取权限状态:
1 | wx.getSetting({ |
发现用户点击确认收货地址:scope为true
发现用户点击取消收货地址:scope为false
发现用户点击未点击收货地址:scope为undefined
(2)若首次取消,诱导用户自己打开授权页面
1 | handleChooseAddress(){ |
15.支付功能
微信支付接口:wx.requestPayment(Object object)
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
timeStamp | string | 是 | 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 | |
nonceStr | string | 是 | 随机字符串,长度为32个字符以下 | |
package | string | 是 | 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** | |
signType | string | MD5 | 否 | 签名算法 |
paySign | string | 是 | 签名,具体签名方案参见 小程序支付接口文档 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
object.signType 的合法值
值 | 说明 | 最低版本 |
---|---|---|
MD5 | MD5 | |
HMAC-SHA256 | HMAC-SHA256 |
示例代码
1 | wx.requestPayment({ |
16.获取用户token(令牌)
1 | const token = wx.getStorageSync("token"); |
获取用户信息(*.wxml):
1 | <button type="primary" open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo">获取授权</button> |
获取用户信息(*.js):
1 | handleGetUserInfo(e){ |
17.使用127.0.0.1:8000时需要设置不校验地址才可使用
其它问题
问题:使用van下拉菜单报错,提示信息
1 | TypeError: wx.nextTick is not a function |
解决:修改小程序代码project.config.json文件libVersion 为 2.2.3即可,如果小程序上线的话,还要在小程序后台-【设置】-【基础库最低版本设置】,里面修改版本 “libVersion”: “2.0.4”