posts

前端el-date-picker标签异常排查小记

ElementUI el-date-picker 更新时数据为空的排查:用 this.$forceUpdate() 强制刷新视图。

<el-col layout-size="medium">
<el-form-item
  label="使用起止日期"
  prop="daterangeBeginAndEndTime"
>
  <el-date-picker
    v-model="dataAppyDetlLedFormEdit.daterangeBeginAndEndTime"
    :picker-options="pickerOptionsEidte"
    type="daterange"
    start-placeholder="开始日期"
    end-placeholder="结束日期"
    value-format="timestamp"
    :clearable="false"
    @blur="
      changePackageTime(
        dataAppyDetlLedFormEdit.daterangeBeginAndEndTime
      )
    "
  >
  </el-date-picker>
</el-form-item>
</el-col>

上述前端标签在update更新的时候使用起止日期显示内容一直为空,通常使用this.$forceUpdate()强制更新视图模型可以解决数据显示问题

看网上解释是说:数据层次太多导致render函数没有自动更新,需要调用this.$forceUpdate()强制刷新,触发updated生命周期。

this.$forceUpdate()的作用:迫使VUE实例重新渲染。注意此方法只影响实例本身和插入插槽内容的子组件,并非所有的子组件。

若使用本文方法还未解决,建议参考 vue双向绑定失效,视图不更新,$set()失效解决办法,使用时间戳加强制更新的方式解决此类问题。

但该处不是此原因。

    showEditDialog(row) {
      this.dataAppyDetlLedFormEdit = Object.assign({}, row)
      this.operateType = 'update'
      this.dataAppyDetlLedFormEdit.daterangeBeginAndEndTime = new Array(2)

      this.dataAppyDetlLedFormEdit.daterangeBeginAndEndTime[0] = this.dataAppyDetlLedFormEdit.begntime
      this.dataAppyDetlLedFormEdit.daterangeBeginAndEndTime[1] = this.dataAppyDetlLedFormEdit.endtime
      this.editDialogVisible = true
      this.dataAppyDetlLedFormNoBegntimeEndtimeUpdate = true
      this.dataAppyDetlLedFormBegntimeEndtimeAdd = false

      this.$forceUpdate()
      console.log(
        'daterangeBeginAndEndTime' +
          this.dataAppyDetlLedFormEdit.daterangeBeginAndEndTime
      )
      console.log('begntime' + this.dataAppyDetlLedFormEdit.begntime)
      console.log('endtime' + this.dataAppyDetlLedFormEdit.endtime)
    },
    changePackageTime(daterangeBeginAndEndTime) {
      this.dataAppyDetlLedFormEdit.begntime = daterangeBeginAndEndTime[0]
      this.dataAppyDetlLedFormEdit.endtime = daterangeBeginAndEndTime[1]
      this.$forceUpdate()
    },

通过console.log观察测试环境为 时间戳

daterangeBeginAndEndTime1683625453000,1691401453000

而生产环境为

daterangeBeginAndEndTime Thu Jan 0108:00:00 CST 1970,Thu Jan 0108:00:00 CST 1970

该参数格式不对el-date-picker无法读取值导致无法显示内容

对应java.util.Date,配置统一返回时间戳就比较容易了。 直接在yml配置即可。

spring:
  jackson:
    time-zone: Asia/Shanghai
    serialization:
      # Date返回前端转时间戳 但不能解决LocalDateTime转时间戳(JacksonCustomizerConfig类解决)
      write-dates-as-timestamps: true