daterangepicker與vue集成,vue無法獲得日期控件時間的修改解決方法
- 2019 年 10 月 4 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/wo541075754/article/details/100674691
在後端管理項目中使用vue來進行前端項目的開發,但我們都知道Vue實際上無法監聽由第三方插件所引起的數據變化。也無法獲得JQuery這樣的js框架對元素值的修改的。而日期控件daterangepicker又基於JQuery來實現的。
因此,在實踐中會出現在日期控件中點擊修改了日期,而無法通過vue來獲得對應的值。
下面來說一下其中一種解決方案:主動觸發Event事件。以下為相關內容的部分代碼。
首先引入日期控件daterangepicker相關依賴的js和css。
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css"/>
當然,上面還需要引入jQuery相關的框架。
在頁面的指定位置添加日期控件的input。
<input id="openDate" type="text" name="openDate" class="form-control" autocomplete="off" placeholder="選擇日期" v-model="openDate"/>
這裡痛v-model與vue中的openDate想綁定,但在後面js中不做特殊處理,是無法通過vue拿到該字段的值的。
js中初始化日期控件及觸發DOM對象上的原生input事件。
// 日期控件 $(function () { $('#openDate').daterangepicker({ showWeekNumbers: false, timePicker: false, timePickerIncrement: 1, singleDatePicker: true, startDate: moment(), maxDate: moment(), locale: { // cancelLabel: '清空' format: "YYYY-MM-DD", //設置顯示格式 applyLabel: '確定', //確定按鈕文本 cancelLabel: '取消', //取消按鈕文本 customRangeLabel: '自定義', daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'], monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ], firstDay: 1 } }).on("hide.daterangepicker",function (ev) { //觸發DOM對象上的原生input事件 this.dispatchEvent(new Event('input')) }); });
需要特別注意的就是最後on方法中對hide.daterangepicker事件進行處理,在處理的方法中手動觸發時間。
而至於該input的openDate屬性在vue中的相關代碼如下:
var vm = new Vue({ //.... data: { //.... openDate:"", //.... }, //... });
至此,日期控件可正確相應,並且vue也能夠拿到日期控件中值的變化。