中国人的性情是总喜欢调和折中的,譬如你说,这屋子太暗,须在这里开一个窗,大家一定不允许的。但如果你主张拆掉屋顶他们就来调和,愿意开窗了。
–鲁迅《无声的中国》
前言
- 微信小程序实质上还是前端的网页的一套东西,腾讯基于浏览器内核封装了一部分常用功能和接口并提供出Api供开发者调用。
- 微信小程序的三种文件类型和前端开发的对应关系:
wxml
=>html
wxss
=>css
js
=>js
优点 VS 不足
优点
- 入门简单,封装了一大部分的常用的功能,如果有前端开发经验,一些前端的知识同样适用。
- 与微信对接,有微信庞大的日活用户。
- 入口比较多,用户安装使用门槛比较低,用完即走。
- 针对不懂的系统和手机型号适配相对比较简单(跨平台?)。
不足
- 安装包限制2M大小,只能做轻量级小程序。
- 一部分前端的东西是不适用小程序的,虽然入门简单,但是还是要学一部分微信封装的东西和一部分前端的知识。
- 开发工具真的是一坨屎,基本上连最基本的语法提示都做不到,完全考验记忆和英文水平,或者要不停的查文档。
- 对网络要求比较高,因为安装包大小限制决定了所有的数据必须走网络,如果网络不太好或者手机配置烂,绝对是噩梦的体验。
注意点
- 由于我是做iOS开发的,研究小程序也就一个多星期,可能对于很多特性和使用方法不是很正确,如有不当请指出。
引用
- 遇到一个功能总是想重构封装一下,以便复用,如网络请求模块,蓝牙模块等等;
- 之前在实现蓝牙数据交互的时候,将蓝牙连接,蓝牙数据按协议组装、蓝牙指令派发及数据解析完成回调、蓝牙数据解析、蓝牙验证等等功能抽成不同的模块在封装在js文件中,在外部引用的时候遇到了问题:
- 小程序
require(‘相对/路径/功能.js’)
必须是相对目录 无法引用绝对路径;官方说是历史包袱无法解决🌚 - 几种目录的区别:
/
根目录./
当前目录../
父级目录
- 小程序
枚举类型
- js是一种弱类型语言,是没有枚举类型的,如果想使用枚举类型,如定义蓝牙相关的指令,可以使用json数据格式来实现枚举的功能:
1 | if (typeof BLECommand == "undefined") { |
- 使用也比较简单,直接在需要引用的界面引入
1 | const BLEConfig = require('/pages/bluetooth/helper/ble-config.js') |
- 按照正常的枚举类型方式使用即可
1 | console.log('GetRandomDigit ---' + BLEConfig.BLECommand.GetRandomDigit) // 0 |
页面跳转
navigateTo
保留当前页面,跳转到新的页面,注意,如果项目架构是有tabBar的,那么跳转的新页面是不能已经划分到tabBar list
的页面。redirectTo
将当前页面移除,替换为新的页面。switchTab
用于在tabBar页面中跳转,注意,加入app启动默认是授权或者介绍页面,此时没有显示tabBar,那么在进入到tabBar主界面时候需要使用switchTab
才可以;之前使用navigateTo
被坑死了。
标签
- 使用view标签,占一行,而text标签占用文字内容宽度 类似于span标签。
间距
margin和padding的设置方向相同
如果提供全部四个参数值,将按上、右、下、左的顺序作用于四边。
- margin: 20rpx 10rpx 25rpx 10rpx
- 如果只提供一个,将用于全部的四边。
- margin:20rpx
- 如果提供两个,第一个用于上、下,第二个用于左、右。
- margin:20rpx 20rpx
- 如果提供三个,第一个用于上,第二个用于左、右,第三个用于下。
- margin:20rpx 20rpx 10rpx
函数作用域问题
1 | outerMethod() { |
- 如果函数使用上面这种嵌套形式,要在内部要使用this,因为作用域的问题,需要在外部保留
let that = this
, - 但是我们以另一种方式实现
1 | outerMethod() { |
swiper
- 使用
swiper
实现轮播图展览时候,如果想自定义swiper上面显示的页码指示的样式,则swiper中不要配置indicator-dots
,否则会显示默认样式。
隐藏Scroll View 的滚动条
- 如果我们想隐藏Scroll View 的滚动条,可以配置如下:
1 | ::-webkit-scrollbar { |
总结
- 总来来说,对于项目不是要求很高,用户体验要求也不是非常高,而且不想投入比较大的人力物力去开发的情况下,小程序也是一个比较好的选择;
- 但是小程序毕竟是小程序,缺点也同样明显,最终需要根据实际情况选择。