zoukankan      html  css  js  c++  java
  • DateTimePicker日期时间选择器中,只需要选择器,不需要输入框

    vue的element-ui中有个日期时间选择器,有个需求就是只需要使用选择器,而不需要输入框,也就是说选择时间的触发条件是别的事件,比如点击某个按钮。

    实现效果:

    组件默认样式:输入框和时间选择器是绑定的,当点击输入框时,才显示时间选择器。

     

    需求:当点击选项:自定义时间 时,显示出时间选择器,此时可以选择时间。

          

     实现代码:

    1.template:

    <!-- 时间选择器 -->
    <el-date-picker
      v-model="form.timeValueArr"
      type="datetimerange"
      range-separator="至"
      start-placeholder="开始日期"
      end-placeholder="结束日期"
      value-format="yyyy-MM-dd HH:mm:ss"
      ref="datePickerRef"
      v-show="false"
      @change="fnchooseCustomTime"
    >
    </el-date-picker>

    2.js:

    this.$refs.datePickerRef.$el.click(); // 手动控制日期时间选择器打开
    
    // 选择自定义时间范围
    fnchooseCustomTime(value) {
      this.form.timeValue = value.join(",");
      this.chooseTime();
    },
    

    实现原理:

    1.需要在HTML中添加一个日期时间选择器,但是设置为false,不显示。

    2.给它设置一个ref标识,在需要选择自定义时间时,直接通过this.$refs.datePickerRef找到该组件,然后$el表示组件元素,通过调用click点击事件控制选择器显示。

    3.给组件设置change方法,当选择完时间之后,可以获取到选择的时间,进行需要的操作。

    bug:

    上面处理出现的bug就是时间选择器会跑到页面左上角,因为时间选择器是相对选择框来定位的,当选择框设置隐藏时,时间选择器就会相对整个页面来定位了,elementui封装的就是如此,除非修改源码。

    所以还是需要让选择框显示,不能设置隐藏,但是可以通过设置层级间接实现。

    解决代码:

    1.template:

    <!-- 时间选择器 -->
    <el-date-picker
      v-model="form.timeValueArr"
      type="datetimerange"
      range-separator="至"
      start-placeholder="开始日期"
      end-placeholder="结束日期"
      value-format="yyyy-MM-dd HH:mm:ss"
      ref="datePickerRef"
      class="date_style"
      @change="fnchooseCustomTime"
    >
    </el-date-picker>

    2.js不变,同上。

    3.css:

    .date_style {
      margin-left: -100px;
       100px;
      z-index: -1;
    }

    注意:

    1.由于在element-UI中对组件进行了封装,所以将输入框和选择器绑定到了一起,只对外提供了一个标签来使用,所以我们这边很难做修改,需要改变源代码。但是可以采用巧妙的办法:比如通过手动的方法来控制组件实现效果。

    2.只要清楚了组件实现的原理,任何组件都可以实现所有想要的效果。

     

  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/5201314m/p/14025824.html
Copyright © 2011-2022 走看看