自定义 element DatePicker组件指令 使选择器呈现为只读状态,用户无法直接编辑,但可以查看和选择日期

16 篇文章 0 订阅
4 篇文章 1 订阅

1.问题

现实中遇到列表的搜索条件使用DatePicker 组件进行开始结束时间筛选,但是手动修改input中的值,导致请求参数异常。比如讲clearable设置为false之后还是能手动清空输入框中的值。虽然组件提供了readonly 属性,但是也会让日期选择也无法使用。

2.思路

那我们先看看这个组件的结构

我们可以看到这里是有一个input输入框 和一个日期选择的popper组成,所以我们要想让键盘不直接修改日期包括删除和编辑 ,我们只需要设置input的readonly属性即可。

3.实现

这里我想到两个实现方式。

1.第一个是在页面的mounted方法中操控dom修改

let domArr = document.getElementsByClassName('el-date-editor');
for(let i = 0;i<domArr.length;i++){ 
   domArr[i].getElementsByTagName('input')[0].setAttribute('readonly',"readonly")
}
需要注意 这里的domArr 是一个类数组,它没有 forEach方法,只能用 for来循环。

2.如果使用的比较普遍和通用,那可以用指令来完成设置

在main.js 文件中定义一个全局指令

Vue.directive('elDatePickerReadonly', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    el.getElementsByTagName('input')[0].setAttribute('readonly',"readonly")
  }
})
<el-date-picker
      v-elDatePickerReadonly
      v-model="value1"
      type="date"
      placeholder="选择日期"
      format="yyyy 年 MM 月 dd 日">
</el-date-picker>

4.总结

遇到问题不要慌,先看文档,文档解决不了的,就先分析分析问题,然后看看组件的构成,然后用最原始的方式(操作dom)的方式处理。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值