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 相关文章推荐
发现的以前不知道的函数
Sep 19 Javascript
javascript实现节点(div)名称编辑
Dec 17 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
Aug 01 Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 Javascript
js时间戳和c#时间戳互转方法(推荐)
Feb 15 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
Oct 26 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
Aug 22 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
Sep 12 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
Aug 04 Javascript
react中hook介绍以及使用教程
Dec 11 Javascript
原生js拖拽功能制作滑动条实例代码
Feb 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
ThinkPHP中关联查询实例
2014/12/02 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
js中new一个对象的过程
2017/02/20 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
JS实现放烟花效果
2020/03/10 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
python基于plotly实现画饼状图代码实例
2019/12/16 Python
Python列表解析操作实例总结
2020/02/26 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
中医专业应届生求职信
2013/11/17 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
市场拓展计划书
2014/05/03 职场文书
英文演讲稿
2014/05/15 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
诚信考试标语
2014/06/24 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
源码解读Spring-Integration执行过程
2021/06/11 Java/Android