vue 更换element版本_element-ui中升级版本遇到一些兼容问题解决办法之一

本文介绍了在Vue项目中升级ElementUI时遇到的TimePicker、DatePicker和Input组件的兼容性问题,特别是change事件的变化。针对Input组件,通过适配器模式,自定义组件`AkRadioGroup.vue`模拟旧版本的change事件触发机制,以此解决大量代码依赖change事件的问题,确保升级过程的平滑过渡。
摘要由CSDN通过智能技术生成

写最近项目(vuejs+element-ui)中遇到的一个问题 升级版本过程中处理兼容问题

因为业务的需要,需要提前升级前端框架(element-ui) 相信一些人用过的话应该就了解,框架从v1.*跌倒到v2.* 难免都会存在一些非兼容性的问题;

主要非兼容问题如下

TimePicker

· 注意:

· 当 is-range 为true 表示日期范围组件 change事件处理函数的参数为一个数组

1.4版本 事件参数值 10:00:00 - 12:00:00

2.0版本上 事件参数值 ["10:00:00", "12:00:00"]

DatePicker

· change 事件参数现在为组件的绑定值,格式由 value-format 控制

· 注意:

· 在选择时间范围组件时(type=daterange),change事件处理函数的参数为一个数组

1.4版本 事件参数值 2000-11-15 00:00:00 - 2000-12-21 00:00:00

2.0版本上 事件参数值 ["2000-11-17 00:00:00", "2000-12-20 00:00:00"]

Input

· change 事件现在仅在输入框失去焦点或用户按下回车时触发,与原生 input 元素一致。如果需要实时响应用户的输入,可以使用 input 事

因为datepicker以及timepicker 相对于复杂点,不过理解input解决方式应该就没问题解决思路是一样的 这里举例说下V2版本中 Input组件中的问题(包含 type = checkbox type = radio )

先说说我遇到了什么问题?

由于V1版本默认支持当改变手动改变变量 “v”值得时,默认会触发change事件(如下代码)

1

2

3

export default {

data () {

return {

v: ''

}

},

methods:{

'handleChange':function(){

// do something ... console.log('组件加载执行我 哈哈哈哈哈哈哈');

}

},

mounted(){

this.v = 6

}

}

升级V2以后就不在支持这种方式,可能一般人想法就是那去改写法把 比如用watch方式去替代监听等等之类的

由于系统依赖change的地方比较多,其次系统正处于线上运行客户量也比较大而且要求迭代速度也比较快 显然这不是一种稳妥的办法! 说下我的解决方式

运用到了两个知识点:设计模式- 适配器模式

举一个贴近生活的例子 家里装修的时候安装插座可能木有考虑大功率电器,有一天网上买了电烤炉发现插座用不了 一般大功率的电器插头都比正常的宽。 那怎么办嘞?换个插座

买个适应这种插头的插板回来

买个转换头

其中“3”更贴切描述适配器作用理解 v-model -

首先要解决问题那么先理解问题出在哪里? 系统部分业务代码依赖了change事件,那么是不是只需要V2版本模拟V1版本提供的change触发时机是不是就可以解决这个问题了?

这是自定义的一个组件,其实很简单 直接看代码吧!!!

ak-radio-group.vue

v-model="v"

:disabled="disabled"

:min = "min"

:max = "min"

:size = "size"

:fill = "fill"

:textColor = "textColor"

@change="handleChange">

import {RadioGroup} from 'element-ui'

export default {

name: 'AkRadioGroup',

model: {

prop: 'value',

event: 'input'

},

components: {

RadioGroup

},

data: function() {

return {

v: ''

}

},

props: {

value: {},

disabled: Boolean,

min: Number,

max: Number,

size: String,

fill: String,

textColor: String

},

methods: {

handleChange (value) {

this.$emit('input',value);

}

},

watch: {

value (o) {

this.v = o;

this.$emit('change',o);

}

},

created () {

this.v = this.value;

}

}

写完之后替换下组件名就平稳解决这个问题 这只是个人的解决思路欢迎讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值