问题根源
1.这样写法在安卓机没问题,在苹果机有问题
if (typeof date !== 'object') {
date = date.replace(/-/g, '/')
}
new Date(date)
2.防抖机制优化
uni-app开发遇到的传值props执行init方法与created执行init方法场景
当props传值变化执行,created也会执行一次,在props不确定性传值情况下,init方法可能执行一次也可能执行两次
优化例子
/**
* 初始化日期显示
* @param {Object} date
*/
init(date) {
const _t = this;
clearTimeout(_t.initTimer)
_t.initTimer = setTimeout(() => {
// 若禁用滑块
if(_t.disableTouch) {
_t.cale.setDate(date) // 初始当前月份
_t.weeks = _t.cale.weeks
console.log("初始化禁用滑块成功~", date)
}else {
// 滑块归位
const theDate = _t.cale.getDate(date).fullDate;
const preDate = _t.cale.getDate(theDate, -1, 'month').fullDate
const nextDate = _t.cale.getDate(theDate, +1, 'month').fullDate
_t.cale.setDate(preDate, "pre") // 初始上一月份
_t.cale.setDate(nextDate, "next") // 初始下一月份
_t.cale.setDate(date) // 初始当前月份
if(_t.calendarDirection) {
_t.changeDateMonth(_t.calendarDirection)
}else {
_t.weeks = _t.cale.weeks
_t.preWeeks = _t.cale.preWeeks
_t.nextWeeks = _t.cale.nextWeeks
}
console.log("初始化非禁用滑块成功~", date)
}
_t.nowDate = _t.calendar = _t.cale.getInfo(date) || {}
console.log("初始化时的当前数据:", _t.nowDate);
}, 50)
},
总结
可用简单延时器作个简单防抖
防抖函数
/**
*
* @param fn
* @param wait
* @param isImmediate
* @returns {(function(): void)|*}
*/
export function debounce (fn, wait = 200, isImmediate = true) {
let timer = null, flag = true
if (isImmediate) {
return function () {
clearTimeout(timer)
if (flag) {
fn.apply(this, arguments)
flag = false
}
timer = setTimeout(() => {
flag = true
}, wait)
}
}
return function () {
clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this, arguments)
}, wait)
}
}