【发布时间】:2019-01-03 14:07:28
【问题描述】:
我正在将vue-hotel-datepicker 库实现到我的项目中,我希望在进行ajax 调用后动态地将日期添加到disabledDates 属性,但我的实现似乎不起作用。当我使用 Vue 开发工具进行调试时,我可以清楚地看到 disabledDates 数组包含我正确的日期,它只是 不会将它们呈现为“禁用”。当我对这些日期进行硬编码时,它会起作用。
模板:
<datepicker
:disabledDates="disabledDates"
:firstDayOfWeek="1"
>
</datepicker>
JS:
data() {
return {
disabledDates: this.fetchBookedDates() //contains correct data, see screenshot below
}
},
methods: {
fetchBookedDates() {
window.fetch(Routing.generate('bookings'))
.then(response => response.json())
.then(data => this.disabledDates = data['period'])
.catch((error) => console.log(error));
}
}
调试步骤:
Vue devtools 在页面加载后立即显示来自我的 fetch 调用的disabledDates,但我的日期选择器上仍然启用所有日期:
硬编码(有效):
当我硬编码几个日期时,它确实将我的日期显示为“已禁用”:
data() {
return {
disabledDates: ['2019-02-03', '2019-02-04']
}
}
我在 Vue 开发工具中得到的结果与我动态添加它们时的结果相同(也在页面加载时):
我的实现有什么问题,我应该如何解决这个问题?
编辑
HotelDatePicker 组件是从我的库中生成的,其中包含我需要覆盖的 disabledDates 属性。此屏幕截图是通过如上所述的 ajax 调用动态添加 disabledDates 的结果。在我的 ajax 调用之后,两个组件(Datepicker 和 HotelDatePicker)具有相同的 disabledDates,包含相同的数据。但是我的日期没有呈现为“禁用”(仅当我对它们进行硬编码时)
【问题讨论】:
-
听起来该组件可能不关心
disabledDates是否是动态的并将它们重新渲染为禁用。您能否在组件中使用一个简单的setTimeout函数,该函数将使用硬编码值更新disabledDates以确认这一点。 -
@thefallen 你是对的。这是否意味着根本无法显示我的 disabledDates ?谢谢。
-
在渲染此组件之前,您可能必须在上方某处获取禁用日期,例如从 html 传递它们或在获取具有禁用日期的数组时强制销毁组件并重新渲染.
标签: javascript vue.js datepicker vuejs2