在模板中,endDate
会按预期更新。但是当使用@selected
属性调用filtersChangerd
方法时,更新后的值不是新值,而是以前设置的值。
<template>
<div>
<datepicker placeholder="Select end date" v-model="endDate" @selected="filtersChanged"/>
<p>endDate Filter: {{ endDate }}</p>
</div>
</template>
<script>
import {bus} from "./../../main"
import Datepicker from 'vuejs-datepicker';
export default {
data () {
return {
endDate: new Date('December 1, 2022 03:24:00')
}
},
methods: {
filtersChanged() {
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,
})
},
calculateStartDate() {
var myDate = new Date();
var newDate = new Date(myDate.getTime() - (60*60*24*7*1000));
return newDate
}
},
components: {
Datepicker
}
}
</script>
发布于 2021-11-08 16:48:22
是的,这是因为'selected‘事件在设置v-nextTick变量的Vue 'nextTick’函数之前触发。所以在你的函数中手动调用它。
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,
});
}
}
参考文献
https://codesandbox.io/s/vuejs-datepicker-selected-event-v9ikz?file=/components/Demo.vue:611-628
https://stackoverflow.com/questions/69885618
复制相似问题