vue.js - Vue Datepicker 不会在渲染时显示默认日期

标签 vue.js datepicker vue-component vuejs3 default-value

我有一个 Vue 应用程序,它正在加载另一个使用 vue-datepicker 实现范围日期字段的组件。我希望它在首次渲染时具有最近 7 天的默认范围。

但是,即使我通过 :value 属性将数据传递给组件,我也无法在渲染时为其设置数据。

我的日期选择器组件代码:

<template>
    <div>
        <Datepicker
            v-model="selectedDates"
            type="range"            
            :value="[startDate, endDate]"
            @change="onDateChange"
            range            
            :enable-time-picker="false"
            format="MMM dd"
        />
    </div>
</template>

<script>
import Datepicker from "@vuepic/vue-datepicker"

export default {
    components: {
        Datepicker,
    },
    data() {
        return {
            selectedDates: [this.startDate, this.endDate],
            startDate: new Date(new Date().setDate(new Date().getDate() - 7)),
            endDate: new Date(),
        }
    },
    methods: {
        onDateChange() {
            this.$emit("date-change", this.selectedDates)
        },
    },
}
</script>

浏览器控制台中也没有错误。

最佳答案

您不能直接基于其他数据 Prop 定义数据 Prop 。您可以使用以下方法直接定义 Prop 的值:

<template>
    <div>
        <Datepicker range
            v-model="selectedDates"
            @change="onDateChange"         
            :enable-time-picker="false"
            format="MMM dd" />
    </div>
</template>

<script>
    import Datepicker from "@vuepic/vue-datepicker"

    export default {
        components: {
            Datepicker,
        },
        data() {
            return {
                selectedDates: [new Date(new Date().setDate(new Date().getDate() - 7)), new Date()],
            }
        },
        methods: {
            onDateChange() {
                this.$emit("date-change", this.selectedDates)
            },
        },
    }
</script>

请注意,我们现在在定义 selectedDates 时不会引用其他属性。

或者您可以使用计算属性,我认为这更清晰:

<template>
    <div>
        <Datepicker range
            v-model="selectedDates"
            @change="onDateChange"         
            :enable-time-picker="false"
            format="MMM dd" />
    </div>
</template>

<script>
    import Datepicker from "@vuepic/vue-datepicker"

    export default {
        components: {
            Datepicker,
        },
        computed: {
            startDate() {
                return new Date(new Date().setDate(new Date().getDate() - 7));
            },
            endDate() {
                return new Date();
            },
            selectedDates() {
                return [this.startDate, this.endDate]
            }
        }
        methods: {
            onDateChange() {
                this.$emit("date-change", this.selectedDates)
            },
        },
    }
</script>

另请注意,您同时绑定(bind)到 v-model:value。我建议仅绑定(bind)到 v-model

关于vue.js - Vue Datepicker 不会在渲染时显示默认日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74943776/

相关文章:

javascript - 翻译 vuejs 路由路径

javascript - Vue.js 2.0 : Modify object properties from method

css - Yii2 Kartik DatePicker - CSS

javascript - 如何注册自定义Vue组件?

javascript - VueJS 在主文件中导入本地和外部脚本和 css 文件

javascript - Vue 变量值在请求后不更新

ruby-on-rails - date_select ruby

javascript - 如何在单击文本字段时显示日期选择器

javascript - 如何在使用 require.context 后动态加载 Vue 组件?

javascript - Vue 警告 : Failed to resolve component