el-radio单选框,点击后支持取消选中

1.需求:

element-ui  需使用el-radio单选框(是,否),每个选项支持勾选后取消勾选

2解决方法:

  1. 给vue绑定组件的时候,需要加一个native,不加的话会被认为是要监听item里面的自定义事件

  2. 加prevent,是用来阻止默认事件的,相当于Jquery里面的event.preventDefault()方法阻止元素发生默认的行为

@click.native.prevent="row.isRequired = row.isRequired === true ? null : true"

@click.native.prevent="row.isRequired = row.isRequired === false ? null : false"

<el-form-item label="" prop="requiredFields" :rules="[{ validator: validateRequiredFields, trigger: 'change' }]">
    <el-table :data="fieldList" class="field-table">
         <el-table-column prop="fieldName" label="录入字段" width="200" />
         <el-table-column label="是否录入">
              <template #default="{ row }">
                  <el-radio-group v-model="row.isRequired" @change="validateForm" class="no-focus">
                     <el-radio :label="true"  @click.native.prevent="row.isRequired = row.isRequired === true ? null : true">是</el-radio>
                     <el-radio :label="false" @click.native.prevent="row.isRequired = row.isRequired === false ? null : false">否</el-radio>
                   </el-radio-group>
               </template>
          </el-table-column>
    </el-table>
</el-form-item>

如果存在样式问题(点击时候有模糊边缘样式),修改如下:

::v-deep .no-focus .el-radio__inner {
  box-shadow: none !important;
}

### 实现 `el-radio` 单选框选中状态显示在右侧 为了使 Element UI 的 `el-radio` 组件的选中状态图标显示在右侧而不是默认位置,可以通过自定义样式来调整布局。具体方法是在原有组件基础上通过 CSS 进行样式覆盖。 #### 方法一:使用内联样式或全局样式文件 可以在项目的公共样式表或者当前页面的 `<style scoped>` 中加入特定的选择器: ```css /* 修改 radio 按钮内部结构 */ .el-radio__input.is-checked+.el-radio__label { order: 1; } .el-radio__input { order: 0; } .el-radio .el-radio__inner::after { transform-origin: center !important; } ``` 上述代码片段中的 `order` 属性用于重新排列 flex 容器内的子元素顺序[^1]。这使得原本位于左侧的文字标签被移动到右边,而圆圈则保持不动但视觉上看起来像是移到了左边。 #### 方法二:借助插槽定制内容 如果希望更灵活地控制布局,则可以考虑使用具名插槽来自定义 `el-radio` 内部的内容展示方式: ```html <template> <div class="custom-radio"> <!-- 使用匿名插槽 --> <span slot="default">{{ label }}</span> <!-- 自定义radio按钮外观 --> <i :class="[{'is-active': isActive}, 'custom-dot']"></i> </div> </template> <script> export default { props: ['isActive', 'label'] }; </script> <style lang="scss" scoped> .custom-radio { display: inline-flex; align-items: center; span { margin-right: auto; /* 推动文字靠左 */ } i.custom-dot { width: 18px; height: 18px; border-radius: 50%; background-color: transparent; border: solid 2px #dcdfe6; &.is-active { background-color: var(--el-color-primary); border-color: var(--el-color-primary); &:before { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 8px; height: 8px; border-radius: 50%; background-color: white; } } } } </style> ``` 这段 Vue 组件模板展示了如何创建一个新的带有自定义样式的单选按钮,并且让其勾选标记出现在右侧[^2]。注意这里并没有直接操作原始的 `el-radio` 组件,而是构建了一个新的组件模拟相同的功能并实现了所需的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值