el-date-picker 的一些小坑(chang事件不生效以及页面数据不更新)

前几天改了一个bug,bug是说el-date-picker这个时间日期选择器选择的时间不能实时更新

chang方法不生效需要使用input方法 

最开始我尝试在去打印一下他的时间,根据官方文档chang方法是可以获取到他的最新时间的,结果使用chang方法并不生效,最后尝试着使用input方法(只要输入的值变化了就会触发input)

 <el-form-item label="起止日期:" prop="time">
      <el-date-picker
      v-model="form.time"
      type="datetimerange"
      clearable
      range-separator="-"
      value-format="yyyy-MM-dd HH:mm:ss"
      start-placeholder="开始时间"
      end-placeholder="结束时间"
      @input="selectTime"
     />
  </el-form-item>

修改时间数据不更新需要使用vue响应式$set

input方法生效之后我开始尝试修改(直接覆盖v-model的值)他的日期时间,但是页面上并没有更新,

于是我先打印出来了数据,结果发现数据是更新的,所以数据更新,页面不更新,这里就需要用到vue的响应式了

为什么要用$set

由于Object.defineProperty()的限制,新增或删除对象属性以及数组里面里面使用索引更新数据无法拦截,需要通过 Vue.set 及 delete 这样的 API 才能生效

在vue中,并不是任何时候数据都是双向绑定的。
在官方文档中,有这样一段话,如下:
在这里插入图片描述

从文档得知,当数据没有被双向绑定的时候,我们就需要使用set了

    selectTime(data) {
      this.$nextTick(() => {
        //不生效
        this.form.form = [data[0], data[1]]; 
        //生效成功更新数据并更新页面
        this.$set(this.form, 'time', [data[0], data[1]]);  
      });
    },

如果使用$set还没有生效的话那可能就是设置的key已经存在于这个对象(form)或数组中的时候,它只会更改data并不会为该key添加响应检测,所以页面上的依赖warehouseOpt的试图就不会更新,解决这个问题的办法就是在设置值之前先把这个属性删除掉,然后再进行this.$set

    selectTime(data) {
      this.$nextTick(() => {
        //先使用$delete对该属性进行删除,才能重新检测到该数据的变化
        this.$delete(this.form, 'time');  
        //生效成功更新数据并更新页面
        this.$set(this.form, 'time', [data[0], data[1]]);  
      });
    },

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
el-date-picker的change事件不生效可能有多种原因。从你提供的引用内容中可以看到你尝试了使用change方法和input方法来监听el-date-picker的值的变化,但都没有生效。 首先,你提到尝试使用change方法来获取el-date-picker的最新时间,但并没有成功。这可能是因为change事件并不适用于el-date-picker组件,或者在你的代码中有其他地方导致change事件无法正常触发。 另外,你还提到了尝试使用input方法来监听el-date-picker的值变化,并且在使用input方法时值得注意的是要使用vue的响应式$set来保证数据更新。这种方法在一些情况下可以有效地解决el-date-picker值不更新的问题。 建议你进一步检查你的代码逻辑,确保change事件和input事件都正确绑定到el-date-picker组件上,并且没有其他代码或配置导致这些事件无法正常触发。另外,你可以尝试使用其他的事件或方法来监听el-date-picker的值的变化,例如使用watch属性来观察el-date-picker值的变化。 总结起来,要解决el-date-picker change事件不生效的问题,你可以尝试以下几点: 1. 确保change事件正确绑定到el-date-picker组件上,并且没有其他代码或配置导致事件无法正常触发。 2. 尝试使用input事件来监听el-date-picker的值变化,并使用vue的响应式$set来保证数据更新。 3. 检查代码逻辑,确保没有其他因素影响el-date-picker的值变化。 4. 尝试使用watch属性来观察el-date-picker的值变化。 希望以上建议对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [el-date-picker 的一些小坑(chang事件不生效以及页面数据更新)](https://blog.csdn.net/weixin_40565812/article/details/126223688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [elementui date-picker日期组件 日期回显失效、change事件失效](https://blog.csdn.net/HuafuCsdn/article/details/120214472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值