element ui 常用功能

221 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。(juejin.cn/post/705288… "juejin.cn/post/705288…

1. element ui 弹层通过$ref 拿到 dom

image.png 需要拿到element ui中的table dom节点

但是 打印看到的是 this.$refs.goodslistRef = undefined

image.png

在dialog 弹层设置为true的时候就可以 拿到dom了

this.$nextTick(_ => {
        console.log("this.$refs.goodslistRef", this.$refs.goodslistRef); // 获取el-dialog中的table        
});

2. DateTimePicker 日期时间选择器 禁用以前的功能 以及 格式:

项目需求是:选择日期和时间,只能选择当前时间以后的时间,禁用最小级别到分钟.

先看第一个属性type:设置typedatetimerange即可选择日期和时间范围

image.png

image.png

image.png

这里有个需要注意的点: 就是值的格式默认是2022-02-24T16:00:00.000Z 这种,但是后端一般需要的是2022-02-28 12-00-00, 然后我们又去用格式化函数处理 这样就多此一举了

image.png

以前就写过这样的代码 so多看文档 在写功能 看看有没有现成可以直接调用的 image.png

设置过去时间:

disabledDate :控制只能选择今天及以后的日期

使用参数picker-options

1. 核心的代码就是这两句

picker-options="expireTimeOption" 
   expireTimeOption: {
        disabledDate(date) {
          return date.getTime() <= (Date.now() - (24 * 60 * 60 * 1000));
        }
      },

设置日期其他写法:

或者是:

  disabledDate(time) {
            return time.getTime() < Date.now() - 8.64e7;
          },

还可以这样:

disabledDate(time) {

            var date=new Date();

             date.setFullYear(date.getFullYear()+2);

             date.setDate(date.getDate()-1);

                 return (time.getTime() < Date.now() - 8.64e7)||(time.getTime()>date.getTime());

          }

image.png

               <el-date-picker
                    @change="upShopTime"
                    v-model="columnFormData.publishTime"
                    type="datetime"
                    placeholder="请选择上架展示时间"
                    format="yyyy-MM-dd HH-mm-ss"
                    value-format="yyyy-MM-dd HH-mm-ss"
                    default-time="12:00:00"
                    :picker-options="expireTimeOption"
                  >
                  </el-date-picker>

但是怎样禁用时分秒呢?

image.png 建议使用参数time-arrow-control,用箭头进行选择(用鼠标滚轮操作稳定性很差),看个人吧

selectableRange :控制选择的时间段。如果是今天,则时间从此刻开始,否则从0时开始

image.png

最终版本:

// time-arrow-control 时分秒是以箭头形式 
  <el-date-picker
                    @change="upShopTime"
                    v-model="columnFormData.publishTime"
                    type="datetime"
                    placeholder="请选择上架展示时间"
                    format="yyyy-MM-dd HH-mm-ss"
                    value-format="yyyy-MM-dd HH:mm:ss"
                    default-time="12:00:00"
                    :picker-options="expireTimeOption"
                  >
 </el-date-picker>

注意:pickerOptions1在data里面,而不是methods里面。


data:加:


 expireTimeOption: {
        disabledDate(date) {
          return date.getTime() <= Date.now() - 24 * 60 * 60 * 1000;
        },
        selectableRange: (() => {
          let data = new Date();
          let hour = data.getHours();
          let minute = data.getMinutes();
          let second = data.getSeconds();
          return [`${hour}:${minute}:${second} - 23:59:59`];
         })()
      },

image.png

但是呢还是有点小缺陷是 没有禁用到s秒的

image.png

image.png 加一个,点击确定时候 是最新的秒数

 //如果选择的时间是以前的 那么会当做当前时间
      var startAt = new Date(this.formMagicData.publishTime) * 1000 /1000;
        if(startAt < Date.now()) {
            this.formMagicData.publishTime = parseTime(new Date());
      }
      console.log('提交的时间',this.formMagicData.publishTime); 

但是bug又来了 点击此刻的时候 发现数据没有赋值上去

image.png

清除此刻

 <el-date-picker
:popper-class="'currentDatePickerClass'"
</el-date-picker>
.currentDatePickerClass > .el-picker-panel__footer > .el-button--text:first-child{ display: none; }

直接全局修改:

.el-picker-panel__footer .el-button--text.el-picker-panel__link-btn { display: none; }

取消单个校验结果 以及 对单个进行校验


     this.$refs["ruleFormRef"].validateField("productCoupons");
        this.$refs["form"].clearValidate(["productCoupons"]);
   this.$refs["addresFormRef"].validateField("zuojiNumber", (Error) => {
          if (!Error) {
            //执行
          } else {
            console.log("成功!!!");
          }
        });

# elementUI如何动态取消表单验证的红心?

把rules从data中拿出来,写在计算属性里面,动态通过参数控制required和规则