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 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
Mar 12 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
JavaScript进阶练习及简单实例分析
Jun 03 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
Jun 06 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
关于iframe跨域POST提交的方法示例
Jan 15 Javascript
js中创建对象的几种方式
Feb 05 Javascript
结合mint-ui移动端下拉加载实践方法总结
Nov 08 Javascript
Vue 使用中的小技巧
Apr 26 Javascript
node中的密码安全(加密)
Sep 17 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 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之Memcache学习笔记
2013/06/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php函数与传递参数实例分析
2014/11/15 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
countUp.js实现数字滚动效果
2019/10/18 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
更改Python命令行交互提示符的方法
2015/01/14 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
党员批评与自我批评
2014/02/12 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
大学生自荐材料范文
2014/12/30 职场文书
罗马假日观后感
2015/06/08 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js