Vue引用第三方datepicker插件无法监听datepicker输入框的值
2023-09-27 14:26:44 时间
一、背景
在Vue项目中使用了第三方的datepicker插件,在选择日期后vue无法检测到datepicker输入框的变化
``` <label class="fl">日期:</label> <div class="input-wrapper fr"> <input class="daterangepicker" ref="datepicker" v-model="dateRange"/> <a href="javascript:;"></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 )
}
}
相关文章
- vue中“:”、“.”、“@”意义
- Vue - 关闭项目 ESlint 校验(非 Vscode 插件)
- vue插件的使用:为什么需要使用 vue.use?为什么不可以直接 import from?
- vue的基本使用
- vue插件
- vue内嵌套其他页面
- 解决在Vue项目中时常因为代码缩进导致页面报错的问题
- vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)
- vue-router 基本使用(vue工程化)
- vue基础---列表渲染
- Vscode 开发Vue必备插件
- 浅谈vue中插件的使用方法Vue.use(xxx),原理及实现
- vue-resize-split-pane 窗口分隔插件的使用
- vue轮播插件vue-awesome-swiper
- Fundebug发布Vue插件,简化BUG监控接入代码
- Vue 之 插件 轮播组件 vue-awesome-swiper 的简单使用整理
- Element-UI+Vue.js
- 包学会之浅入浅出Vue.js:升学篇
- Vue 中 (moment)操作日期的加减与展示
- vue 生成二维码:vue-qr插件