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

v-data-table-server表格内EventDate组件翻页后不更新问题

问题原因

你这个问题出在EventDate组件的逻辑上:组件只在created钩子中把传入的initialDate赋值给了data里的date变量,但切换分页时,Vuetify的表格会复用行组件,不会重新创建EventDate实例,所以created钩子不会再次执行,date变量也就不会跟着新的initialDate更新,导致格式化后的日期还是旧数据。

解决方案

有两种简单的修复方式,选一种就行:

方式一:直接基于props计算(更简洁)

删掉data里的date变量,让formattedDate直接使用props的initialDate,这样props变化时计算属性会自动响应:

<template>
  <div>
    <span>{{ formattedDate }}</span>
  </div>
</template>

<script>
export default {
  name: "EventDate",
  props: {
    initialDate: {
      type: String,
      required: true,
    },
  },
  computed: {
    formattedDate() {
      const dt = new Date(this.initialDate);
      const day = dt.getDate().toString().padStart(2, "0");
      const month = (dt.getMonth() + 1).toString().padStart(2, "0");
      const year = dt.getFullYear();
      const hours = dt.getHours().toString().padStart(2, "0");
      const minutes = dt.getMinutes().toString().padStart(2, "0");
      const seconds = dt.getSeconds().toString().padStart(2, "0");

      return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;
    },
  },
};
</script>

方式二:监听props变化更新date

如果一定要保留data里的date,可以添加一个监听器,当initialDate变化时同步更新date:

<template>
  <div>
    <span>{{ formattedDate }}</span>
  </div>
</template>

<script>
export default {
  name: "EventDate",
  props: {
    initialDate: {
      type: String,
      required: true,
    },
  },
  data() {
    return {
      date: "",
    };
  },
  computed: {
    formattedDate() {
      const dt = new Date(this.date);
      const day = dt.getDate().toString().padStart(2, "0");
      const month = (dt.getMonth() + 1).toString().padStart(2, "0");
      const year = dt.getFullYear();
      const hours = dt.getHours().toString().padStart(2, "0");
      const minutes = dt.getMinutes().toString().padStart(2, "0");
      const seconds = dt.getSeconds().toString().padStart(2, "0");

      return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;
    },
  },
  created() {
    this.date = this.initialDate;
  },
  watch: {
    initialDate(newVal) {
      this.date = newVal;
    }
  }
};
</script>

推荐用第一种方式,更符合Vue的响应式设计,代码也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:13:10