小程序
一:小程序的特点
小程序是一种不需要下载、安装即可使用的应用,它出现了触手可及的梦想,用户扫一扫或者搜一下即开打开应用,也出现了用完即走的理念,用户不用关心安装太多应用的问题,应用随处可用,但又无须安装卸载。
- 1:无需下载:我们直接使用它,所以无须安装是小程序最基础的一个特性;
- 2:触手可及:当我们拿着智能手机接触周边的时候,我们可以通过手机直接获得信息,就是周边的信息;
- 3:用完即走:对于周边要完成的任务来说我们需要的是用完即走;
- 4:无须卸载:小程序看起来是程序,但是它以完全不同于过去APP的形状出现,它有更灵活的应用组织形态;
二:微信小程序官方文档地址
- 1.官方工具 注:真心难用,代码提示弱的,而且没有自动保存,卡顿厉害、 ,。、 还没办法多开窗口,建议使用webstorm,按照webstorm开发微信小程序代码提醒文档进行配置就可以使用了。
- 2.简易教程
- 3.设计指南;在这里查看如何符合设计标准,仅供参考,非强制性;
- 4.运营规范;在这里查看禁止事项;
- 5.接入指南
- 6.支付文档
- 7.客服消息
- 8.特殊行业所需资质材料
- 9.数据分析
三:如何学习微信小程序
-
1.小程序开发文档
四:小程序的跳坑指南
一、 小程序常见FAQ
二、开发微信小程序遇到的坑
- 1、wxml内不能执行方法,只能处理简单的运算如 “+ - * /”,比如遇到遍历list,每个item的金额需要格式化,只能在js里预先格式化好再setData一遍
- 2、只能通过setData()更新视图
关于 setData
假如你想在 this.setData 的 key 中传入变量,下述写法报错:
triggerSelected (e) { var dataset = e.target.dataset; var id = dataset.id; var name = dataset.name; var type = dataset.type; this.setData({ selected[type]: { id: id, name: name } }); }
且 this.setData 不支持模板字符串形式的 key,下述写法也报错:
triggerSelected (e) {
var dataset = e.target.dataset;
var id = dataset.id;
var name = dataset.name;
var type = dataset.type;
this.setData({
`selected.${type}`: {
id: id,
name: name
}
});
}
可将 selected 存入变量,直接操作 selected 变量后再 this.setData:
triggerSelected (e) {
var dataset = e.target.dataset;
var id = dataset.id;
var name = dataset.name;
var type = dataset.type;
var selected = this.data.selected;
selected[type] = {
id: id,
name: name
};
this.setData({
selected: selected
});
}
- 3、我们规定页面路径只能是五层,请尽量避免多层级的交互方式。
- 4、遇到奇怪的问题(如样式等)先重启工具
- 5、wx.setStorage(OBJECT) 【目前每个小程序限制5M】
- 6、view 添加点击效果[需要开启hover效果]:
`
` - 7、后台不能接受POST数据,但是可以接收GET请求参数
url: url,
data: data,
method: "POST",
dataType: "json",
header: {
// 此处若为application/json则服务端无法获取POST的参数
'content-type': 'application/x-www-form-urlencoded'
}
- 8、当调用小程序 wx.getUserInfo(OBJECT) 获取用户基本信息时,需要用户进行授权操作,如果用户点击了拒绝,则再次调用该方法就不会出现对应的授权窗口。只能通过wx.openSetting(OBJECT)调起客户端小程序设置界面,让用户打开允许授权的开关,返回用户设置的操作结果后重新授权。
- 9、 微信后台更新了request合法域名,可以直接去微信开发工具–>工具–>刷新,立马生效。
- 10、 小程序官方没有提供java版登录信息解密示例,可以用这个demo java版解密demo
- 11、微信小程序的rpx会出现精度问题 设置margin-left/margin-right负值,可能导致页面能够左右晃动。 猜测 是rpx导致的精度问题。 1rpx = (设备宽度 / 750) px
rpx本质上会转换为px,在不同宽度的设备上,实际的rpx值会转换为带小数的px值,四舍五入可能出现问题,rpx转换在iPhone6上匹配准,所以设计稿建议用iphone6尺寸。
- 12.wx.request表现不合理,并且携带特殊字符会报错 请求返回404错误,也会触发success回调。 不要想当然的认为会触发fail回调,判断一个请求成功或失败,请使用wx.request返回的状态来判断。只有不符合规范的请求,才会触发fail。
- 13.不要给Page.data传入太多无用数据,会影响渲染效率,在iOS上表现特别明显尽量传入精简的数据,保持Page.data和view间简单的绑定关系即可。
- 14.微信小程序开发问题-ios的Date问题 开发小程序过程中,发现后台默认返回的 “2017-11-11 11:11:11”;格式不支持会直接返回null,ios要这种格式:”2014-09-25T13:24:00”,因为要计算时间差getTime(),所以对于返回null需要兼容. 解:
1.方法转化
strToDate(dateObj){
dateObj = dateObj.replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '').replace(/(-)/g, '/')
dateObj = dateObj.slice(0, dateObj.indexOf("."))
return new Date(dateObj)
}
2.方法2
safari兼容写法
var safariTime = new Date(myTime.substr(0,10)+"T"+myTime.substr(11,8));
- 15.小程序的Toast都必须带有Icon,要实现只有文字的Toast只能自定义。
- 16.关于
渲染时不会将 nodes 解析为常规标签,你只能拿到这样一大坨:
无法直接获取其中的 dom,且不可在 .wxss 中定义其样式故必须添加内联 style。
且
- 17.css垂直居中
(1)行内块垂直居中(浏览器解析差异大,不见使用 flex布局)
{ display:inline-block; vertical-align:middle; }
(2)行高控制(保险) (3)定位控制(保险) 1)高度未知
.gm-vertical-center{ top:50%; transform:translate(0,50%); }
2)高度已知
{ top:50%; margin-top:-(高度/2)px }
五、总结小程序的那些限制:
颜色限制
navigationBarTextStyle
导航栏标题颜色仅支持black/white
backgroundTextStyle
下拉背景字体、loading
图的样式,仅支持dark/light
borderStyle
tabbar
上边框的颜色, 仅支持black/white
程序限制
- 脚本内不能使用
window
等对象 zepto/jquery
会使用到window
对象和document
对象,所以无法使用。- 样式表不支持级联选择器
- 本地资源无法通过
css
获取background-image
:可以使用网络图片,或者base64
,或者使用<image/>
标签 - 不支持 A 标签,无法打开普通网页
- 并发request请求不能超过5个;
- 绑定开发者人数、体验者人数也有限制;
- 请求里合法域名有个数限制;
- 页面内跳转不能超过5级;
- 不支持跳转外部链接
- 目前不支持识别图中二维码,
- 背景图片不能用本地图片,
数量限制
- 底部或顶部可以添加tab按钮区域
tabBar
是一个数组,只能配置最少2个、最多5个tab
,tab
按数组的顺序排序。 - 一个应用同时只能打开5个页面
大小限制
tabBar
上面的按钮iconPath
图片路径,icon
大小限制为40kb
tabBar
上面的按钮selectedIconPath
选中时的图片路径,icon
大小限制为40kb
setData
页面传递数据单次设置的数据不能超过1024kB
setStorage
本地缓存最大为10MB
- 小程序源码打包后的大小限制为
1M
消息限制
- 支付当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发1条,多次支付下发条数独立,互相不影响)
- 提交表单 当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)