element-ui中radio组件在循环中的使用

博客围绕审批结果提交功能展开,假设默认审批初始状态为通过,点击提交可将审批结果传到后台,还附上了demo效果图。涉及Vue.js、JavaScript、HTML、ES6等技术。

先附上一张demo的效果图
在这里插入图片描述

这里假设默认审批初始状态为通过,点击提交将审批结果传到后台
<template>
  <div class="container">
    <div class="approve_item" v-for="(item,index) in info" :key="index">
      <div class="apply_info">
        <p>申请时间:{{item.time}}</p>
        <p>申请理由:{{item.reason}}</p>
        <p>申请人:{{item.apply_name}}</p>
      </div>
      <el-radio-group v-model="radio[index]">
        <el-radio :label="1">通过</el-radio>
        <el-radio :label="2">拒绝</el-radio>
      </el-radio-group>
    </div>

    <div class="btn_wrap">
      <el-button type="primary" @click="submit">提交</el-button>
    </div>
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {
      radio: [], //审批结果列表
      info:[
        {
          id:7,
          time:'2021.1.6',
          reason:'质量不好',
          apply_name:'张三',
        },
        {
          id:16,
          time:'2021.1.8',
          reason:'不想要了',
          apply_name:'李四'
        },
        {
          id:20,
          time:'2021.2.17',
          reason:'物流太慢',
          apply_name:'王五'
        },
      ]
    };
  },
  methods: {
  	// 将结果提交后台
    submit(){
      this.info.map((item,index)=>{
        item.is_pass = this.radio[index] == 1?true:false
      })
    }
  },
  mounted() {
    this.info.map(()=>{
      this.radio.push(1)  //给一个初始状态1(通过)
    })
  },
};
</script>

<style lang='scss' scoped>
.container{
  padding:20px 50px;
  .approve_item{
    height: 100px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom:1px solid #eee;
    .apply_info{
      font-size:16px;
      color:#666;
      p{
        line-height: 1.5em;
      }
    }
  }
  .btn_wrap{
    width:100%;
    display: flex;
    justify-content: flex-end;
    margin-top:30px;
  }
}
</style>
### Element UI 中 `el-radio-group` 的点击事件及其用法 在 Element UI 中,`el-radio-group` 是用于实现一组单选框的功能组件。其核心特性之一是通过监听特定的事件来响应用户的交互操作。 #### 事件绑定方式 `el-radio-group` 组件默认支持 `change` 事件而非 `click` 事件[^2]。这意味着当用户选择某个选项时,会触发 `change` 事件而不是 `click` 事件。因此,在实际开发中应确保正确绑定该事件以避免不必要的问题。 以下是标准的事件绑定示例: ```vue <template> <div> <el-radio-group v-model="selectedValue" @change="handleRadioChange"> <el-radio label="Option1">选项一</el-radio> <el-radio label="Option2">选项二</el-radio> </el-radio-group> </div> </template> <script> export default { data() { return { selectedValue: '' }; }, methods: { handleRadioChange(value) { console.log('当前选中的值:', value); // 可在此处执行接口调用或其他逻辑处理 } } }; </script> ``` 上述代码展示了如何通过 `@change` 属性绑定到 `handleRadioChange` 方法上,并传递所选值作为参数。 --- #### 解决点击触发两次的方法 如果遇到某些情况下 `el-radio-group` 或子项 `el-radio` 被误配置导致重复触发事件的情况,则需排查以下几个方面: 1. **确认是否错误绑定了多个事件** 如果同时绑定了 `@click` 和 `@change`,可能会造成多次触发的现象。建议仅保留 `@change` 即可满足业务需求[^1]。 2. **检查是否存在嵌套结构冲突** 若 `el-radio-group` 嵌套于其他具有相同功能的父级容器内(如另一个表单项),可能导致事件冒泡引发多重回调行为。此时可通过 Vue 的 `.stop` 修改器阻止事件传播: ```vue <el-radio-group v-model="selectedValue" @change.stop="handleRadioChange"> <!-- 子项 --> </el-radio-group> ``` 3. **验证计算属性设置合理性** 当自定义了 `computed` 属性并重写了模型同步机制时,可能因内部状态更新异常而导致额外渲染循环发生。例如引用提到的场景下存在如下片段[^3]: ```javascript computed: { 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); } } } ``` 此部分逻辑涉及复杂的状态管理流程,若未妥善维护则容易引入副作用。 4. **prop 传参一致性校验** 对比动态绑定 (`v-bind`) 与静态赋值之间的差异也很重要。前者能够实时反映数据变化从而减少潜在风险;后者则固定初始值无法感知后续调整动作[^4]。 --- ### 总结 为了有效利用 `el-radio-group` 并规避常见陷阱,请始终遵循官方推荐的最佳实践——优先采用 `change` 事件代替直接依赖 DOM 行为模拟的方式完成目标设定。与此同时注意审查项目整体架构设计防止意外干扰因素介入其中影响最终呈现效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值