这周开始开发小程序,之前有和同事一起做过,这次由于需求变更大改,恰好我一个人负责前端的开发,所以当然学到了很多新知识。
小程序对于前端来说是比较简单的,基本上就是一些最基本的用法,而且小程序本身封装好了很多好用的方法,比如原来写一个滑到底部更新的方法在小程序有onReachBottom()的方法来直接执行,所以很方便,但是也就是小程序很多规定死了的,反而不够灵活了,比如底部导航,你不用小程序自带的导航,就会出现一些奇奇怪怪的问题,但是需求需要在导航上面加上气泡消息,这个用自带的是完全用不了的。
说了这么多还没说问题,头一次像这次这么正式的写笔记,有些小激动。总结下问题吧。
1.关于var that = this,这个是在所有方法里面的第一行几乎都会出现的一句话,但是以我用过vue的经验来说如果方法add(){}直接这样写,this就是指的是构造器,this.data当然可以获取数据了,当然,这样写也是有用的,我也以为万无一失了,但是一次偶然的机会发现得不到数据,找到半天发现this的指向变了导致无法得到数据,所以为了确保安全还是首先写这一行代码吧。
2.小程序的wx.showToast,这个大家都很熟悉吧,属性icon有两个值(success和loading)两种状态要是有第三种失败的图标就好了,但是网上一查查到一张图片是可以的
但是就是用不了,就这个问题我把所有的图标都换成了success,有点菜,后来才知道可以自定义图片,image属性有了就可以随心所欲的显示你想要的icon了。
3.请求接口后都会重新设置data,this.setData({})这个与vue不太一样,当设置一个数据是对象的时候比如person:{‘name’:‘miss’,‘age’:18}如果只是设置一个属性,比如你this.setData({person:{‘name’:xx}})就会发现你的age消失了,当然百度一下就会有很多解决方法,我的解决方法是this.setData({[‘person.name’]:‘xx’}),这样就能改变name的值也不会影响age,还有如果属性中带有变量的话还可以这么用set.Data({[`person[${index}].name:‘xx’]}),但是这个最不友好的地方是只能改变一个值,那如果值多了怎么办,我目前的做法是直接在数据最外层写,不要一个对象套着一个对象,这样就不会出错了。
4.页面跳转中传参数的问题,比如
wx.switchTab({
url: '../find/find',
success: function(e) {
var page = getCurrentPages().pop();
if (page == undefined || page == null) return;
page.onLoad();
}
})
这里面是不能传递参数的,所以需要提供一个全局变量,在新页面中直接获取,不过wx.navigateTo
是可以传参数的比如…/like/like?id=1&name=xx,在新页面中onLoad方法中的参数option中这些值都有,
5,image标签中设置width是100%,height不设置或者设置auto,都不能正常显示图片,这时可以查看小程序文档中mode属性widthFix这样就能自动适应了。
6.大家一定遇到到在wxss里面写背景图片的经历,比较好用的方法1:在标签上直接写虽然在工具上可以看到,但是手机仍然没有显示,,2:在wxss直接写绝对连接也就是线上的图片,3.用标签来代替,用定位定位到最顶层z-index:-1就ok了,当然还有其他的什么转base64在引用我没搞懂就不说了。
7,picker-view和picker的选择,小程序自带的选择,他们两个有好有坏,一个是编辑比较复杂,一个是在安卓手机出现无限循环的弊端,看你的选择了,我公司要求没那么高,就选择了pick。
8,点击事件获取该元素自定义的属性,自定义属性最好用data-name来命名,获取的时候是e.currentTarget.dataset.name;注意name是小写,不管data-NaMe中是否含有大写,取的时候都是小写。为什么用currentTarget呢,和target有区别,跟原生的意思差不多。
。。。。
目前就写这么多,以后还会更新,把开发中遇到的都会记录下来;