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实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
javascript 自定义事件初探
Aug 21 Javascript
jquery tab插件制作实现代码
Jun 22 Javascript
jquery ajax abort()的使用方法
Oct 28 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
JS版的date函数(和PHP的date函数一样)
May 12 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
JavaScript+html5 canvas绘制的小人效果
Jan 27 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
详解如何在Vue2中实现组件props双向绑定
Mar 29 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
vue debug 二种方法
Sep 16 Javascript
浅谈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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
php 中英文语言转换类
2011/09/07 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
Python做简单的字符串匹配详解
2017/03/21 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
深入理解Django的中间件middleware
2018/03/14 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
如何解决python多种版本冲突问题
2020/10/13 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
领导调研接待方案
2014/02/27 职场文书
安全承诺书格式
2014/05/21 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
2014年网管工作总结
2014/12/11 职场文书
大学生助学金感谢信
2015/01/21 职场文书
关于颐和园的导游词
2015/01/30 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
七年级作文之英语老师
2019/10/28 职场文书
Nginx配置之禁止指定IP访问
2022/05/02 Servers
python读取mat文件生成h5文件的实现
2022/07/15 Python