Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决


Posted in Javascript onJanuary 27, 2018

一、背景

在Vue项目中使用了第三方的datepicker插件,在选择日期后vue无法检测到datepicker输入框的变化

<label class="fl">日期:</label>
 <div class="input-wrapper fr">
  <input class="daterangepicker" ref="datepicker" v-model="dateRange"/>
  <a href="javascript:;" rel="external nofollow" ></a>
 </div>
export default {
  data() {
    return {
      dateRange: ''
    }
  },
  watch: {
    dateRange(newVal, oldVal) {
      console.log(newVal) // 选择日期后无法监听dateRange的改变
    }
  }
}

二、分析

查找资料发现:Vue实际上无法监听由第三方插件所引起的数据变化。因此上面的方法是行不通的。但是,Vue给我们提供的一个方法,它可以将任意数据转化为可以被Vue监听到的数据,他就是:vm.$set。

三、解决

以我用到的datepicker为例(jquery-daterangepicker)

data() {
    return {
      date: '',
      beginDate: '',
      endDate: ''
    }
  },
mounted () {
  $('.daterangepicker').dateRangePicker({
    autoClose: true,
    format: 'YYYY-MM-DD'
  }).bind('datepicker-change', this.setDate) //插件自带方法,选择日期后触发回调
 },
methods: {
  setDate() {
    let datepicker = this.$refs.datepicker
    //这一步是关键,具体说明可以参见vue api手册
    this.$set(this.date, 'beginDate', datepicker.value)
    this.$set(this.date, 'endDate', datepicker.value)
    this.beginDate = this.date.beginDate.slice(0, 11)
    this.endDate = this.date.endDate.slice(-10)
  }  
 },
  watch: {
  // 这里就可以监听数据变化啦,可以愉快的选择日期了!
   beginDate(newVal, oldVal) {
     this.$emit( 'beginDateChange', newVal )
   },
   endDate(newVal, oldVal) {
     this.$emit( 'endDateChange', newVal )
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript公共脚本库系列(一): 弹出层脚本
Feb 24 Javascript
莱鸟介绍window.print()方法
Jan 06 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
js实现图片缓慢放大缩小效果
Aug 02 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
使用Layui搭建后台管理界面的操作方法
Sep 20 Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 Javascript
js轮播图之旋转木马效果
Oct 13 Javascript
Vue实现图书管理小案例
Dec 03 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
浅谈React中组件间抽象
Jan 27 #Javascript
React Native中NavigatorIOS组件的简单使用详解
Jan 27 #Javascript
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 #Javascript
使用D3.js创建物流地图的示例代码
Jan 27 #Javascript
javascript获取图片的top N主色值方法详解
Jan 26 #Javascript
Vue中render方法的使用详解
Jan 26 #Javascript
Angular利用trackBy提升性能的方法
Jan 26 #Javascript
You might like
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
JS加ASP二级域名转向的代码
2007/05/17 Javascript
use jscript with List Proxy Server Information
2007/06/11 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
js实现简单点赞操作
2020/03/17 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python科学计算环境推荐——Anaconda
2014/06/30 Python
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
python 全文检索引擎详解
2017/04/25 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
Java模拟试题
2014/11/10 面试题
亲属关系公证书
2014/04/08 职场文书
就业协议书的作用
2014/04/11 职场文书
授权委托书怎么写
2014/09/25 职场文书
小浪底导游词
2015/02/12 职场文书
暂住证证明
2015/06/19 职场文书
红与黑读书笔记
2015/06/29 职场文书