vant
vant copied to clipboard
[Bug Report] RadioGroup 的change事件,不希望在用户未操作的情况下,当绑定值发生变化时,执行处理函数
重现链接
https://codesandbox.io/s/vant-4-issue-template-forked-gmk8v8
Vant 版本
4.6.8
描述一下你遇到的问题。
RadioGroup的change事件在用户没有点击单选框的情况下,当绑定值前后发生变化时,执行了处理函数。在处理页面请求后台数据回显时,如果某个表单项的值跟单选框某个值相关联,用户未操作的情况下,值变化可能就比较疑惑。
重现步骤
比如:模仿请求后台数据 1.初始值为undefined 2.定时器2s后,更改值, 3.change处理函数执行
设备/浏览器
No response
<template>
<div id="app">
<van-radio-group v-model="checked" @input="handleInput">
<van-radio name="1">单选框 111</van-radio>
<van-radio name="2">单选框 2</van-radio>
</van-radio-group>
</div>
</template>
<script setup>
import { ref } from "vue";
const checked = ref(undefined);
setTimeout(() => {
checked.value = "2";
}, 100);
const handleInput = (val) => {
console.log(val);
};
</script>
@huanganfree
RadioGroup
的 change 事件说明是: 当绑定值变化时触发的事件
组件库本身只考虑这个值有没有发生变化,而不是用户有没有点击
至于何时进行了赋值,是否是用户操作进行的赋值,这个判断在业务本身很容易判断
如果你就是只想知道用户点击时候的事件,而不是数据发生变化时的事件,那你应该用的是 Radio
的 click
事件
以下是示例代码:
示例代码中,默认初始状态,radio 2 还是会被选中,当用户点击是触发 onClickRadio
你的逻辑可以写在这里
<script setup>
import { ref } from "vue";
const checked = ref(undefined);
setTimeout(() => {
checked.value = "2";
}, 100);
const onClickRadio = (value) => {
console.log("用户点击了单选框", value);
};
</script>
<template>
<div id="app">
<van-radio-group v-model="checked">
<van-radio name="1" @click="onClickRadio('1')">单选框 1</van-radio>
<van-radio name="2" @click="onClickRadio('2')">单选框 2</van-radio>
</van-radio-group>
</div>
</template>