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.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
Nov 16 Javascript
javascript动态加载二
Aug 22 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
Feb 18 Javascript
vue axios 表单提交上传图片的实例
Mar 16 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
Vue多系统切换实现方案
Jun 05 Javascript
浅谈Vue初学之props的驼峰命名
Jul 19 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
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python isinstance函数介绍
2015/04/14 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
python类中super() 的使用解析
2019/12/19 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Python调用JavaScript代码的方法
2020/10/27 Python
python 爬虫请求模块requests详解
2020/12/04 Python
大学学习生活感言
2014/01/18 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
社区维稳工作方案
2014/06/06 职场文书
物业保安岗位职责
2014/07/02 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
个人工作表现自我评价
2015/03/06 职场文书
市场督导岗位职责
2015/04/10 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
2019同学聚会主持词
2019/05/06 职场文书