比如8月份是8 ,那就要转换为08 ,同理可得 其他低于十月份的月份也是要这样做:
打开组件的js文件
接下来看下代码:
这个函数的意义在于,当我们改变值的时候,微信小程序会主动调用这个函数,往这个函数传值,也就是这三个参数:
newVal,oldVal,changedPath 代码的讲解都在注释中。
需要注意的是,我们通过判断月份的值选择加0,并赋值到一个变量中,再把这个变量赋值到渲染到页面的变量时候,
不能和properties下的对象名字相同,为什么?因为不能在observer函数中去改变属性值,会出现无限递归的现象,也就是死循环
在该文件的data部分增加一个值:——index
---------------------
先来感受一下代码,报错报的简直扎心。
总结下原因:observer函数是在data发生改变时小程序主动调用的,在observer函数内setData时又再次改变了properties的值,observer函数再次调用,不停的循环……无限递归调用……于是内存耗尽。
那么问题来了,为啥type为Number时不会发生内存泄漏?
本质上就是因为properties值根本没变。当外部改变index值为A(假如),触发observer函数时,函数内部将传进来的值进行拼串后,由于值的类型设置为Number,拼串后的值0A会按照数字解析成A,所以进入函数内部后这个值绕了一圈还是没变,所以不会无限递归调用observer.
看到内存泄漏、递归这些字眼是不是就怕怕的?莫方(说给自己听)。
既然observer内部改变properties内部数据会产生问题,那么,咱们就不改变呗!曲线救国。在data里设置一个变量_index,把拼串后的值给到_index就好啦!注意在wxml中也要把绑定的数据改为{{_index}}。完美~
代码如下:
最后!!!千万不要尝试在observer函数里改变properties的值!!!