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 相关文章推荐
jquery实现动态菜单的实例代码
Nov 28 Javascript
一个Action如何调用两个不同的方法
May 22 Javascript
快速掌握Node.js事件驱动模型
Mar 21 Javascript
JavaScript 继承详解(六)
Oct 11 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
three.js 入门案例详解
Jan 23 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
May 15 Javascript
Vue $mount实战之实现消息弹窗组件
Apr 22 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
浅析TypeScript 命名空间
Mar 19 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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 mssql 时间格式问题
2009/01/13 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHPMailer发送邮件
2016/12/28 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
分享Python文本生成二维码实例
2016/01/06 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
淘宝客服专员岗位职责
2014/04/11 职场文书
公司人事任命通知
2015/04/20 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android