当前位置: 首页 > article >正文

vue el-radio-group多选封装及使用

基于Element UI库的Vue组件,实现了一个单选/多选框组合的效果,可以根据 type 属性的不同值来切换单选框(默认)和按钮式单选框/多选框。

创建组件index.vue (src/common-ui/radioGroup/index.vue)
<template>
  <el-radio-group
      v-model="hValue"
      :size="size"
      :disabled="disabled"
      :text-color="textColor"
      :fill="fill"
  >
    <template v-for="(item, index) in dataSource">
      <el-radio-button
          v-if="type === 'button'"
          :key="index"
          :label="item[hProps.value]"
          :disabled="item[hProps.disabled]"
          :name="item[hProps.name]"
      >{{ item[hProps.label] }}</el-radio-button
      >

      <el-radio
          v-else
          :key="index+'else'"
          :label="item[hProps.value]"
          :disabled="item[hProps.disabled]"
          :border="item[hProps.border] || border"
          :size="item[hProps.size]"
          :name="item[hProps.name]"
          :class="{ vertical }"
      >{{ item[hProps.label] }}</el-radio
      >

    </template>
  </el-radio-group>
</template>

<script>
  export default {
    name: "HRadioGroup",
    props: {
      border: Boolean,
      dataSource: {
        type: Array,
        label: [String, Number],
        value: [String, Number, Boolean],
        disabled: {
          type: Boolean,
          default: false
        },
        border: {
          type: Boolean,
          default: false
        },
        size: {
          type: String,
          validator(value) {
            return ["medium", "small", "mini"].indexOf(value) !== -1;
          }
        },
        name: String
      },
      disabled: {
        type: Boolean,
        default: false
      },
      fill: String,
      size: {
        type: String,
        validator(value) {
          return ["medium", "small", "mini"].indexOf(value) !== -1;
        }
      },
      textColor: String,
      type: {
        type: String,
        default: "normal",
        validator(value) {
          return ["normal", "button"].indexOf(value) !== -1;
        }
      },
      value: {
        type: [String, Number, Boolean]
      },
      vertical: Boolean,
      props: {
        type: Object,
        default() {
          return {};
        }
      }
    },
    computed: {
      hValue: {
        get() {
          return this.value;
        },
        set(value) {
          this.$emit("input", value);
          this.$emit("change", value);
        }
      },
      hProps() {
        return {
          label: "label",
          value: "value",
          disabled: "disabled",
          border: "border",
          size: "size",
          name: "name",
          ...this.props
        };
      }
    }
  };
</script>

<style lang="scss" scoped>
  .vertical {
    display: block;
    margin-left: 0 !important;
    & + .vertical {
      margin-top: 10px;
    }
  }
</style>



页面引入
  • 在需要使用HRadioGroup组件的地方,通过import语句引入组件注册并使用

<template>
  <div>
    <h-radio-group
        :value="selectedValue"
        :data-source="dataSource"
        @change="val => handleRadioGroupChange(val)"
    >
    </h-radio-group>
  </div>
</template>
<script>
  import HRadioGroup from '@/common-ui/radioGroup/index'

  export default {
    components: {
      HRadioGroup
    },
    data() {
      return {
        filterVal: '',
        dataSource: [],
        selectedValue: ''
      }
    },
    methods: {
      handleRadioGroupChange(val, row) {
        console.log(val,'选中的数据')
      },
    }
    // ...
  }
</script>

确保你已经安装了Vue.js和Element UI,并在项目中引入它们。


http://www.kler.cn/a/156038.html

相关文章:

  • C# 委托与匿名方法
  • 深入理解接口测试:实用指南与最佳实践5.0(一)
  • 带你掌握springboot集成SpringSecurity安全框架
  • 【网络工程】计算机硬件概述
  • LeetCode【0014】最长公共前缀
  • 解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
  • pytorch 中的dim 的作用范围
  • Promise自定义封装
  • react native 环境准备
  • 三极管在数字电路中的应用
  • PyQt6 QToolButton工具按钮控件
  • Nacos源码解读04——服务发现
  • linux 内核regulator
  • 记录 | linux查看文件夹大小
  • 【c++随笔15】c++常用第三方库
  • 浅学指针(5)sizeof和strlen的进阶理解
  • k8s安装步骤
  • Pandas实战:电商平台用户分析
  • 【一个超简单的爬虫demo】探索新浪网:使用 Python 爬虫获取动态网页数据
  • android studio安装SDK时无法勾选
  • 逻辑漏洞测试靶场实验
  • vue $nextTick 样式私有化
  • 设计模式--观察者模式(Observer Pattern)
  • 如何熟练使用vim工具?
  • spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查
  • 数据挖掘之时间序列分析