vue滑动选择器(一键开启时间选择器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue滑动选择器(一键开启时间选择器)相关的知识,希望对你有一定的参考价值。

参考技术A # vue滑动选择器(一键开启时间选择器)(移动端和PC端都能使用) 

### 先来张效果图

安装 npm install time_check_jiangji

引入 import Time from 'time_check_jiangji'

## 直接上干货,demo

```javascript

<template>

  <div class="App">

    <div @click="timeShow = true">点击显示Time组件</div>

    <Time v-if="timeShow" :cancleFn="cancleFn" :time="true" :defaultValue="[2019, 6, 5, '上午', '随便2']"  :arr="[['上午', '下午'], ['随便1', '随便2']]" @click="clickFn" :arrayFirstdayAndLastday="['2012.6.8', '2019.6.10']" :stylBtn="'color': '#00ffff'" />

  </div>

</template>

<script>

import Time from 'time_check_jiangji'

export default

  name: 'App',

  components:

    Time

  ,

  data()

    return

      timeShow: true

    ;

  ,

  methods:

    clickFn (e)

      console.log(e)

      this.timeShow = false

    ,

    cancleFn ()

      console.log('取消')

      this.timeShow = false

   

 

;

</script>

```

下面再来一个说明

```javascript

@click="clickFn"

是点击确认按钮的触发的函数 接受一个参数(数组类型),是当前的值

(例如[2019, 6, 5, "上午", "随便2"])

:cancleFn="cancleFn"  (特别注意,是:cancleFn不是@cancleFn,是: 不是@)

是点击取消按钮触发的函数,不传则不显示取消按钮(非必传)

:defaultValue="[2019, 6, 5, "上午", "随便2"]"

是回显值(一维数组,非必传,传了能回显)  数据类型注意要对应上

:time="true"

开启年月日的时间选择模式(只能选择三年内的日期,非必传)

:arr="[['上午', '下午'], ['随便1', '随便2']]"

传入二维数组(非必传)

如果:time="true" 那么前三列是时间(年月日),第四列是['上午', '下午'],第五列是['随便1', '随便2']

如果:time="false"或者未传, 第1列是['上午', '下午'],第2列是['随便1', '随便2']

:arrayFirstdayAndLastday="['2016.6-8', '2019-6.10']" (日期用逗号(.)或者一杠(-)隔开都行)

arrayFirstdayAndLastday是一维数组,数组长度必须是2,数组长度必须是2,数组长度必须是2

第一项是最早的显示时间,第二项是最晚的显示时间

['2016.6.8', '2019.6.10'] 那么最早显示时间是2016年6月8号,最晚时间是2019年6月10号

:stylBtn="'color': '#00ffff'"

是按钮这一栏的行内样式

```

附上github地址 https://github.com/jiangji1/time_check_jiangji

Vue 2 日期选择器组件

【中文标题】Vue 2 日期选择器组件【英文标题】:Vue 2 Datepicker Component 【发布时间】:2017-02-20 18:49:15 【问题描述】:

我正在尝试使用 Bootstrap Datepicker 创建一个 Vue 2 组件,但在选择日期后尝试更新输入时卡住了,这是我的代码:

Vue.component('datepicker', 
template: '\
  <input class="form-control datepicker"\
        ref="input"\
        v-bind:value="value"\
        v-on:input="updateValue($event.target.value)"\
        v-on:blur="updateValue($event.target.value)"\
        v-on:focus="updateValue($event.target.value)"\
        data-date-format="dd-mm-yyyy"\
        data-date-end-date="0d"\
        placeholder="dd-mm-yyyy"\
       type="text"  />\
',
props: 
    value: 
      type: String,
      default: moment().format('DD-MM-YYYY')
    
,
mounted: function () 

,
methods: 
    updateValue: function (value) 
        this.$emit('input', value);
    ,

);

如果通过键盘输入,但在日历中选择时,值不会更新。有什么想法可以通过日历更新日期更改的值吗?

** 更新**

我已经得到了以下代码:

mounted: function() 
    let self = this;
    this.$nextTick(function() 
        $('.datepicker').datepicker(
            startView: 1,
            todayHighlight: true,
            todayBtn: "linked",
            autoclose: true,
            format: "dd-mm-yyyy"
        )
        .on('changeDate', function(e) 
            var date = e.format('dd-mm-yyyy');
            self.updateValue(date);
        );
    );

但它现在会更新页面上所有 Datepicker 实例的值。如何设置它以便仅针对选定的 Datepicker 进行更新?

【问题讨论】:

组件安装后是否也需要初始化它,例如通过 $('.datepicker').datepicker(options)?在 vue 2.0 中,请记住在 this.$nextTick 方法调用中执行此操作,以确保 DOM 元素在调用之前存在。 你试过 v-on:change 事件吗? 【参考方案1】:

当你初始化 Datepicker 时,你可以在选项中指定当项目被选中时应该调用什么方法:

mounted: function() 
   let self = this;
   let args = 
      format: 'DD-MM-YYYY',
      placeholder: 'dd-mm-yyyy',
      onSelect: function(dateText) 
         self.updateValue(dateText);
      
   ;
   this.$nextTick(function() 
      $('.datepicker').datepicker(args)
   );

【讨论】:

感谢您为我指明正确的方向,我猜此代码用于不同的日期选择器,而不是 Bootstrap Datepicker。请参阅我更新的问题。【参考方案2】:

这是最终的工作组件:

Vue.component('datepicker', 
template: '\
  <input class="form-control datepicker"\
        ref="input"\
        v-bind:value="value"\
        v-on:input="updateValue($event.target.value)"\
        data-date-format="dd-mm-yyyy"\
        data-date-end-date="0d"\
        placeholder="dd-mm-yyyy"\
        type="text"  />\
',
props: 
    value: 
      type: String,
      default: moment().format('DD-MM-YYYY')
    
,
mounted: function() 
    let self = this;
    this.$nextTick(function() 
        $(this.$el).datepicker(
            startView: 1,
            todayHighlight: true,
            todayBtn: "linked",
            autoclose: true,
            format: "dd-mm-yyyy"
        )
        .on('changeDate', function(e) 
            var date = e.format('dd-mm-yyyy');
            self.updateValue(date);
        );
    );
,
methods: 
    updateValue: function (value) 
        this.$emit('input', value);
    ,

);

【讨论】:

你好,你在哪里加载引导日期选择器?只是require('bootstrap-datepicker')吗?我不断收到一个 js 错误,说 $(...).datepicker is not a function 我只是像使用 【参考方案3】:

这样您就不会被选定的日期覆盖,也不会丢失您写的文本

this.$nextTick(function() 
          $(this.$el).datepicker(args).on('changeDate', function(e:any) 
            var date = e.format(format);
            var sval:string = e.currentTarget.__vue__.$refs.input._value;
             //console.log(sval);               
           //so that value doesnt get erased everytime i put one character there, wait to have more
           if(sval.length>2) 
             self.updateValue(date); console.log('upate'+date+sval);
             
        ).on('hide', function(e:any) 
            var date = e.format(format);
            var sval:string = e.currentTarget.__vue__.$refs.input._value;            
             self.updateValue(date); console.log('upate2'+date+sval);              
        );
      );    

【讨论】:

以上是关于vue滑动选择器(一键开启时间选择器)的主要内容,如果未能解决你的问题,请参考以下文章

vue对日期选择器获取到的时间进行加减操作

iOS UI 测试 - 选择器轮仅调整一项滑动

vue操作下拉选择器获取选择的数据的id方法

vue颜色选择器el-color-picker的安装及使用

iview中Select 选择器多选校验方法

iOS炫酷动画图案多种选择器网络测速滑动卡片效果等源码