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 使用手册(七)
Sep 23 Javascript
JavaScript 计算图片加载数量的代码
Jan 01 Javascript
JavaScript中的稀疏数组与密集数组[译]
Sep 17 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
PHP开发者必须掌握的6个关键字
Apr 14 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 Javascript
AngularJS获取json数据的方法详解
May 27 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
js实现简单选项卡制作
Aug 05 Javascript
vue 把二维或多维数组转一维数组
Apr 24 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python之os操作方法(详解)
2017/06/15 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
精灵市场:Pixie Market
2019/06/18 全球购物
门卫岗位职责
2013/11/15 职场文书
我的祖国演讲稿
2014/05/04 职场文书
2015年元旦活动总结
2014/05/09 职场文书
土建工程师岗位职责
2014/06/10 职场文书
自我管理的活动方案
2014/08/25 职场文书
运动会加油稿20字
2014/11/15 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS