我有一个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>

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

推荐答案

不能直接基于其他数据props 定义数据props .您可以使用以下命令直接定义props 的值:

<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时不引用其他属性.

或者,您可以使用计算(computed)属性,在我看来,这样做更干净:

<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>

还要注意,您同时绑定到v-model:value.我建议只绑定到v-model个.

Vue.js相关问答推荐

Nuxt.js i18n不提供默认区域设置中的页面而不重定向

设置Vite Vue 3需要多个应用程序输出目录

vuejs中如何获取数组总长度

VueJS CKeditor5 上传图片

Defer推迟执行,直到外部脚本加载到 Vue.js

为什么在 Vue.js 中使用 `var` 关键字?

Vue 和 Bootstrap Vue - 动态使用插槽

如何更新手动安装的 vue 组件上的props?

包含 Vue.js v-if 和 v-for 指令的 HTML 标签在加载时flash

如何使用 laravel-mix 将 bootstrap-vue 加载到 Laravel 5 中?

如何从 .vue 文件中导出多个对象

怎样1秒后自动隐藏VueJS中的元素

Vue 组件 Vue-Instant

Vuetify v-btn 路由活动类问题

即使在生产模式下构建,VueJS 也会显示开发模式开发模式消息

如何将 git hash 添加到 Vue.js 组件

Vue3在按钮单击时以编程方式创建组件实例

带有 Google Auth Signin 的 Vuejs 全局函数

Vue组件如何命名

如何在 vue 组件中使用 vuex?