Ant Design Vue DatePicker自定义渲染通过按钮来触发时间选择组件

DatePicker日期选择组件默认是通过点击输入框展开日期选择面板,Ant Design日期组件也允许我们自定义渲染通过其他组件来触发展开选择面板。我们通过下面代码来演示通过按钮触发DatePicker日期选择组件。

node.js webpack方式

<template>
  <div>
    <a-date-picker   v-model="selectDatae" @change="onChange" @ok="onOk">
       <a-button type="primary">{{ dateString=="" ?   '请选择日期':dateString }}</a-button>
    </a-date-picker> 
  </div>
</template>
<script>
import moment from 'moment';
export default {
  data() {
    return {
      selectDatae: undefined,
      dateString:"" //选择后的日期
    };
  },
  methods: {
    //选择日期的事件
    onChange(value, dateString) {
      this.dateString=dateString;
      console.log('Selected Time: ', value);
      console.log('Formatted Selected Time: ', dateString);
    },
  //选择日期后确定事件
    onOk(value) {
      console.log('onOk: ', value);
    },
    clearTime() {
      this.selectDatae = undefined;
    },
  },
};
</script>

浏览器引入js

在线试一试

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Ant Design Vue DatePicker例子</title>
    <script src="//www.itxst.com/package/ant-design-vue/moment.js"></script>
    <script src="//www.itxst.com/package/vue/vue.min.js"></script>
    <script src="//www.itxst.com/package/ant-design-vue/antd.js"></script>
    <link href="//www.itxst.com/package/ant-design-vue/antd.min.css" rel="stylesheet" />
    <!--国际化-->
    <script src="//www.itxst.com/package/ant-design-vue/antd-with-locales.js"></script>
    <style>
        body {
            padding-top: 10px
        }
    </style>
</head>
<body>
    <div id="app">
        <div :style="{  paddingBottom:'10px' }">
         <a-locale-provider :locale="locales.zh_CN">
                <a-date-picker v-model="selectDatae" :default-value="moment(getCurrentDate(),'YYYY-MM-DD')">
            <a-button type="primary">{{ selectDatae ? selectDatae : '请选择日期' }}</a-button>
           </a-date-picker>    </a-locale-provider>  
          
        </div>
    </div>
<script>
    const { LocaleProvider, locales } = window.antd;
    var app = new Vue({
        el: '#app',
        data() {
            return {
                locales,
                selectDatae: undefined  //选择后的日期
            };
        },
        methods: {
            moment,
            getCurrentDate() {
                return new Date().toLocaleDateString();
            },
            onChange(date, dateString) {
                console.log(date, dateString);
            }
        },
        created: function () {
            // 里面的字符可以根据自己的需要进行调整
            moment.locale('zh-cn', {
                months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
                monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
                weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
                weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
                weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
                longDateFormat: {
                    LT: 'HH:mm',
                    LTS: 'HH:mm:ss',
                    L: 'YYYY-MM-DD',
                    LL: 'YYYY年MM月DD日',
                    LLL: 'YYYY年MM月DD日Ah点mm分',
                    LLLL: 'YYYY年MM月DD日ddddAh点mm分',
                    l: 'YYYY-M-D',
                    ll: 'YYYY年M月D日',
                    lll: 'YYYY年M月D日 HH:mm',
                    llll: 'YYYY年M月D日dddd HH:mm'
                },
                meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
                meridiemHour: function (hour, meridiem) {
                    if (hour === 12) {
                        hour = 0;
                    }
                    if (meridiem === '凌晨' || meridiem === '早上' ||
                        meridiem === '上午') {
                        return hour;
                    } else if (meridiem === '下午' || meridiem === '晚上') {
                        return hour + 12;
                    } else {
                        // '中午'
                        return hour >= 11 ? hour : hour + 12;
                    }
                },
                meridiem: function (hour, minute, isLower) {
                    const hm = hour * 100 + minute;
                    if (hm < 600) {
                        return '凌晨';
                    } else if (hm < 900) {
                        return '早上';
                    } else if (hm < 1130) {
                        return '上午';
                    } else if (hm < 1230) {
                        return '中午';
                    } else if (hm < 1800) {
                        return '下午';
                    } else {
                        return '晚上';
                    }
                },
                calendar: {
                    sameDay: '[今天]LT',
                    nextDay: '[明天]LT',
                    nextWeek: '[下]ddddLT',
                    lastDay: '[昨天]LT',
                    lastWeek: '[上]ddddLT',
                    sameElse: 'L'
                },
                dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
                ordinal: function (number, period) {
                    switch (period) {
                        case 'd':
                        case 'D':
                        case 'DDD':
                            return number + '日';
                        case 'M':
                            return number + '月';
                        case 'w':
                        case 'W':
                            return number + '周';
                        default:
                            return number;
                    }
                },
                relativeTime: {
                    future: '%s内',
                    past: '%s前',
                    s: '几秒',
                    ss: '%d秒',
                    m: '1分钟',
                    mm: '%d分钟',
                    h: '1小时',
                    hh: '%d小时',
                    d: '1天',
                    dd: '%d天',
                    M: '1个月',
                    MM: '%d个月',
                    y: '1年',
                    yy: '%d年'
                },
                week: {
                    // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
                    dow: 1, // Monday is the first day of the week.
                    doy: 4  // The week that contains Jan 4th is the first week of the year.
                }
            })
        },
    });
</script>
</body>
</html>