先说问题,在点击el-radio时,需要先判断一下,根据判断结果决定本次点击是否有效,直接用v-model是实现不了这种效果的,所以就需要把v-model拆开——绑定value属性和监听它的input或change事件,在input或change中判断,真正需要起作用时把value绑定的值改掉。通过查看文档发现el-radio-group(因为我把el-radio放到了el-radio-group中)有change事件,就下意识的认为el-radio-group是通过value属性和change事件来实现v-model的。

// 模板长这样
<el-radio-group :value="radioValue" @change="handleChange"><el-radio lable="A">A</el-radio><el-radio label="B">B</el-radio>
</el-radio-group>
// js长这样
data() {
return {radioValue: ''
},
methods: {handleChange(val) {console.log(val)}
}

然而,让我意想不到的事情发生了,每次change事件获取的都是value绑定的老值,并不能获取当前点击的el-radio的值,我凌乱了。

本着自我怀疑的态度,我盯着代码不下2分钟,怎么都想不通。终于无解!还是去看看源码怎么实现的吧。到node_modules/element-ui/packages/radio/src/radio.vue中找到了答案,

methods: {handleChange() {this.$nextTick(() => {this.$emit('change', this.model);this.isGroup && this.dispatch('ElRadioGroup', 'handleChange', this.model); // 这一行,它并不是简单的把当前radio的label传出去,而是把model传出去了});}}

让我们看看model究竟是什么

model: {get() {return this.isGroup ? this._radioGroup.value : this.value;},set(val) {if (this.isGroup) {this.dispatch('ElRadioGroup', 'input', [val]);} else {this.$emit('input', val);}this.$refs.radio && (this.$refs.radio.checked = this.model === this.label);}},

model是一个计算属性,如果当前el-radio是嵌套在el-radio-group中的就取el-radio-group的value。在我的应用场景里面,这显然是一个bug,我打算去element-ui的github上提issue了,在经过一番搜索后,我发现了https://github.com/ElemeFE/element/issues/10197,已经有人提了,竟然2018年就提了。element-ui的贡献者建议使用input事件,我就用input事件代替了change事件了,我的element-ui版本是2.15.6,我使用input确实能满足我的功能。

可能更多的还是先入为主了,看到文档中说有change事件,就想当然的认为双向绑定用了change事件。

如果对你有帮助,请点赞哈,嘻嘻:)

el-radio-group change事件获取老值相关推荐

  1. js change事件 获取新值和旧值_前端总结(JS篇)

    JS 引入方式 1-内部js <script> </script> 2-外部引入 <script src="路径"> 注意不要写js代码 < ...

  2. jquery的radio的change事件

    一.用的jquery的radio的change事件:当元素的值发生改变时,会发生 change 事件,radio选择不同name值选项的时候恰巧是值发生改变 表单单选框 <input type= ...

  3. JQuery判断radio是否选中并获取选中值的示例代码

    这篇文章主要介绍了JQuery判断radio是否选中并获取选中值的方法,代码很简单,但很实用,需要的朋友可以参考下 其他对radio操作功能,以后在添加.直接上代码,别忘记引用JQuery包 ? 1 ...

  4. jquery radio/checkbox change 事件不能触发的问题

    需求 <input type="radio" id="need" name="need" value="0" /& ...

  5. antd radio设置默认选中_antd中如何给绑定Form的Radio.Group设置默认的选中值!

    嗯~~ 本人2年前端小菜鸡,刚刚换了新公司,接手的项目使用的是react+antd+dva+umi等技术. 之前完全没有antd的经验,但是有2年react的经验,所以嘛,项目上手难度一般,但是扛不住 ...

  6. html的<input type='radio'/>change事件坑

    一.坑复现 <div><input type='radio' name='test' value='1' checked/>1<span id='test_a'>a ...

  7. C#中ComboBox的SelectedIndexChanged事件获取Tag值

    DataTable table = new DataTable; /// <summary>         /// 点击Cmb控件时获取Tag值         /// </sum ...

  8. JQuery判断radio是否选中,获取选中值

    2019独角兽企业重金招聘Python工程师标准>>> 他对radio操作功能,以后在添加.直接上代码,别忘记引用JQuery包 <!DOCTYPE html PUBLIC & ...

  9. html复选框值改变后事件,javascript – 从onclick/onchange事件获取HTML值的复选框

    简短的回答: 使用点击事件,它不会触发,直到更新的值,并触发时,你希望它: Checkbox function handleClick(cb) { display("Clicked, new ...

最新文章

  1. 在OpenShift平台上验证NVIDIA DGX系统的分布式多节点自动驾驶AI训练
  2. 安装部署中的数据库打包和快捷方式启动浏览器
  3. swift开发之--UISearchBar的使用/UISearchController的使用
  4. highly dynamic working process is a great approach for learning
  5. Python Django 获取多条记录API
  6. API Gateway简介
  7. 前端学习(2984):一文理解数据劫持2
  8. 工业互联网联盟发布工业物联网安全框架
  9. 如何限制计算机用户的登录时间,电脑怎么设置上网时间有限制
  10. 【语音隐写】基于matlab LSB语音隐藏【含Matlab源码 431期】
  11. JetBrains Resharper VS2017 破解方法(License Server 破解方法)
  12. 产品经理如何看待NPDP认证?
  13. 【数字化】数字档案馆系统测试指标分布总览
  14. java查询ip归属地
  15. mac地址前6位对应vendor
  16. 自动刷新网页,自动刷新当前页面,JS调用
  17. 位 字节 千字节 兆字节 (bit Byte KByte MByte GByte TByte)
  18. 【深度学习图像识别课程】毕业项目:狗狗种类识别(1)环境准备
  19. 艾莫基IMG老板李洪波欠销售提成不给,反而颠倒黑白,抹黑对方
  20. 批量提取文件名到excel,批量提取文件名到excel表格

热门文章

  1. win7系统补丁服务器,win7怎么批量卸载系统更新补丁KB? win7快速删除系统补丁的技巧...
  2. GVM踩坑记录之:rsync: connection unexpectedly closed 和 rsync: read error: Connection reset by peer (104)
  3. 如何倾听客户之声?你需要的不仅仅是调研
  4. CatfishCMS任意命令执行导致getshell
  5. C语言文件操作(1)
  6. SAP外协采购单和销售单需求关闭预留未清处理方法
  7. SSH注解 关于hibernate一对一双向外键级联关系 查询两表的内容 例子
  8. 手机如何测光照度_如何3分钟学会用手机的专业模式拍照?
  9. jhipster快速入门指南
  10. linux authentication token manipulation 错误