You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

vuejs-datepicker@selected事件触发时v-model返回上一次旧值问题

问题根因

vuejs-datepicker组件的@selected事件触发时机早于v-model绑定值的更新时机,你在事件回调里读取this.endDate时,响应式数据还未完成本次更新,因此拿到的是上一次选择的旧值。

解决方案

  • 方案1:直接使用@selected事件返回的最新日期
    @selected事件会默认将本次选中的新日期作为参数传递给绑定方法,直接使用该参数即可,无需等待响应式变量更新:
    修改filtersChanged方法接收参数:
filtersChanged(newEndDate) {
  console.log("Filter endDate", newEndDate)
  bus.$emit('filtersChanged', 
  {
     placeFilter: d => d.place === this.selectedPlaceFilter, 
     startDate: d => d.time >= this.startDate, 
     endDate: d => d.time <= newEndDate, 
  })
}
  • 方案2:通过$nextTick等待响应式更新完成
    如果必须使用this.endDate变量,可以将逻辑包裹在$nextTick回调中,等Vue完成响应式数据更新后再取值:
filtersChanged() {
  this.$nextTick(() => {
    console.log("Filter endDate", this.endDate)
    bus.$emit('filtersChanged', 
    {
       placeFilter: d => d.place === this.selectedPlaceFilter, 
       startDate: d => d.time >= this.startDate, 
       endDate: d => d.time <= this.endDate, 
    })
  })
}
  • 方案3:监听endDate变化触发逻辑
    移除@selected事件绑定,改为监听endDate变量的变化,变量更新后自动执行后续逻辑:
export default {
  data () {
    return {
        endDate: new Date('December 1, 2022 03:24:00')
      }
  },
  watch: {
    endDate() {
      this.filtersChanged()
    }
  },
  methods: {
    // 原有filtersChanged逻辑无需修改
  },
  components: {
    Datepicker
  }
}

内容的提问来源于stack exchange,提问作者kakakakakakakk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:36:04