小程序出来也是很久了,刚发布的时候拿来 demo 小小的玩了一下,感觉还不错。现在终于自己着手开发了一个,满满的成就感~
在我理解,小程序就是微信作为一个中间桥梁,可以通过微信来实现调用手机更多的硬件接口,弥补了 web 开发的先天不足。同时,相对于微信网页,流畅度提升了不少。当然里面的坑还是不少的,暂时我就把自己遇见的总结一下吧。
准备工作
HTTPS:
小程序上线只支持 https,所以一定要先完成从 http 到 https 的升级工作,要不然开发完了也不能上线。当然,在开发调试的时候还是可以用 http 的,所以可以一边开发调试,同时进行证书认证的工作。
这里有个小的 tips,如果域名是在阿里云,可以申请一个为期一年的免费的证书,对于小公司或者个人开发者来说还是很不错的,有需要的可以去阿里云看看。
[补充]:Let’s Encrypt 这里有提供免费的证书服务,但是需要自己用脚本来每隔90天重新申请一次。
开发者工具
小程序的开发者工具还是挺不错的,还可以用于微信网页开发,虽不说完美,但是基本够用。
这里有个问题:当在电脑上调试的时候,app.js 里面的代码是可以正常运行的,但是在手机上预览的时候却会出现问题。比如获取用户地理位置,还没获取到就会加载了首页内容,所以如果有依赖地理位置的内容,需要判断是否获取到信息再进一步加载。
开发者文档
开发者文档是关于小程序最全的介绍,不懂就去看一下还是极好的。
进行开发
新建页面
这里一定要注意,新建页面不是直接新建,而是在 app.json 里面进行配置,程序会直接新建一个 new 文件夹包含四个文件,分别是 new.js/new.json/new.wxml/new.wxss。
获取地理位置
小程序提供了获取地理位置的接口,但是只能获取到用户坐标信息,这个显然是不行的,我们一般会需要用户所在的城市名称,方便显示在页面上。
这个时候就需要引入第三方地图接口了,现在百度高德腾讯都提供了小程序专用接口,根据相应文档调用起来也很容易。
我把每个都试了一下,最后决定还是用腾讯家的吧,毕竟和小程序是一家嘛。
在腾讯地图官方文档里,把实例化 API 核心类信息放在了 onLoad 里面,这里我建议放在 app.js 的 globalData 里,方便在不同页面里调用。
app.js
|
比如 index 页面调用的时候
index.js
|
对于需要获取用户所在城市,需要先通过 wx.getLocation({})
来获取,然后再在回调函数里转换为地理信息。
第三方插件
这个我试了下 moment.js 失败了,自己写了个修改日期格式的函数代替了,以后再研究一下吧。
页面间数据传递
目前来看有三种方式:
- 通过缓存来写入读取
这个比较简单,直接调用wx.setStorage()
写入,然后调用wx.getStorage()
来读取就好了。
- 通过路由后面拼接参数
这里要注意,同一个页面不能接收多个页面传过来的路由参数,只能接收第一个过去的参数,其他的就不再接收。
例如: 有 A->B 同时有 C->B,那么谁先到 B 页面,B 就接收谁的参数,后过去的就忽略了。
- 通过 getCurrentPages()
这是一个很好用的东西,配合 wx.navigateBack()
可以很流畅的完成一些操作,不用频繁的读写缓存,也不用担心不能接收参数的问题。
使用方法:
|
当然要注意,上一个页面必须有setData()
方法才行。
模板
如果多个页面都长得差不多,可以通过模板功能来达到共用的目的,这样可以少做很多重复无意义的工作。
具体如何使用可以参考官方文档,写的很详细了。这里提一句,在使用模板的页面,需要分别引用一下相应的文件:
|
对于数据处理部分,在模板文件里该怎么循环就怎么循环,然后在调用的页面给予相应的赋值即可。这些操作都可以直接在wxml
文件里完成,并不依赖js
操作。
实现字母索引
很多地方都会用到像 iOS 通讯录一样通过右侧字母滑动来快速获取相应字母开头的信息,小程序没有像其他比如 mintUI 一样的组件,只能通过 scroll-view
这个视图容器来实现,还是有点复杂的。
官方文档在这里就显得有点过于简略,只好上网查找别人的实现方法。同时,在电脑上操作和手机上操作还是有点区别,电脑上略卡顿,手机上会好很多。
最重要的是要设置好scroll-view
相关的属性,scroll-y
上下滚动,,高度要动态设置否则会出现显示异常,scroll-into-view
值应为某子元素id,对应子元素的 id 属性必不可少,滚动区域和字母列表循环的是同一个数组数据。
滚动区域内容:
|
右侧字母列表:
|
onLoad 加载的时候要设置高度
|
手机点击字母事件:
|
手机滑过字母事件:
|
总结
写了很多,其实很多东西我还没有接触,比如调用更多的硬件接口,估计也是有不少的坑,等我用到了再补充吧。现在就等着证书下来好上线我的第一个小程序啦。