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中的107个基础知识收集整理 推荐
Mar 29 Javascript
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
jquery ajax修改全局变量示例代码
Nov 08 Javascript
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
JavaScript改变CSS样式的方法汇总
May 07 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
Vue入门之数量加减运算操作示例
Dec 11 Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
Sep 02 Javascript
使用TS来编写express服务器的方法步骤
Oct 29 Javascript
详解jQuery的核心函数和事件处理
Feb 18 jQuery
浅谈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/10/30 PHP
浅析php原型模式
2014/11/25 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
Python3学习urllib的使用方法示例
2017/11/29 Python
python 动态加载的实现方法
2017/12/22 Python
Python中常见的异常总结
2018/02/20 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
解决python对齐错误的方法
2020/07/16 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
政治表现评语
2014/05/04 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
优秀教研组申报材料
2014/12/26 职场文书
遗愿清单观后感
2015/06/09 职场文书
个人更名证明
2015/06/23 职场文书
读书笔记怎么写
2015/07/01 职场文书