Easepick日期选择器动态修改minDate不生效,如何解决?
解决Easepick动态更新minDate的问题
问题核心:初始化时LockPlugin的minDate只会读取一次setMinDate的值,后续变量更新不会自动同步到插件配置,仅调用renderAll()无法生效,需要先更新插件配置再执行重绘。
具体解决步骤:
- 同步LockPlugin的minDate配置:当
setMinDate变量发生变化时,直接修改picker实例中LockPlugin的配置项 - 执行重绘:更新配置后调用
picker.renderAll()(或picker.render())刷新日期选择器
代码示例:
假设你通过用户操作(比如按钮点击、其他选择器变更)修改setMinDate,在该操作的回调中添加以下代码:
// 注意:新的minDate需为Date类型,若用moment处理可转成Date:moment(newMinDateStr).toDate() picker.plugins.LockPlugin.options.minDate = setMinDate; picker.renderAll();
优化你的现有代码:
- 合并重复的
select事件监听,避免冗余 - 内联模式(
inline: true)下日期选择器始终显示,show事件不会触发,无需绑定
调整后的初始化代码:
const picker = new easepick.create({ setup(picker) { picker.on('select', (e) => { const { start, end } = e.detail; $('.rateStart').html(moment(start).format('DD MMM')); $('.rateEnd').html(moment(end).format('DD MMM')); sessionStorage.setItem('endDateTempRate', end); sessionStorage.setItem('startDateTempRate', start); }); }, calendars: 2, inline: true, element: document.getElementById('datepicker'), css: [ '../assets/css/easepick.css' ], plugins: ['RangePlugin', 'LockPlugin'], RangePlugin: { tooltipNumber(num) { return num - 1; }, locale: { one: 'night', other: 'nights', }, }, LockPlugin: { minDate: setMinDate, minDays: 2, inseparable: true, filter(date, picked) { if (picked.length === 1) { const incl = date.isBefore(picked[0]) ? '[)' : '(]'; return !picked[0].isSame(date, 'day') && date.inArray(bookedDates, incl); } return date.inArray(bookedDates, '[)'); }, } });
关键说明:
- Easepick插件的初始化配置不会自动响应外部变量变化,必须手动修改实例的配置项
- 确保传入的
minDate是Date对象,若使用moment处理日期,需通过moment().toDate()转换格式 - 内联模式下无需绑定
show事件,直接在setMinDate变量更新时执行配置同步和重绘即可
内容的提问来源于stack exchange,提问作者Hamza Zahir
相关产品推荐
相关产品推荐

