前言
vant 作为一款流行的 ui 框架,其中,van-radio-group 组件是一个常用的单选框组件,但有时我们需要根据项目需求进行定制化封装。本文将介绍如何基于 vue 框架封装 van-radio-group 组件,让我们一起来探索吧!
封装文件
在这个组件中,使用了 vant 框架提供的 van-radio-group 和 van-radio 组件来实现单选框的功能。组件接受三个  props:required(是否必选)、disabled(是否禁用)和 options(选项数组)。在组件的 data 属性中,定义了 checked 和 checkRadioFlag 两个属性,分别用来保存选中项的值和判断是否需要清空选中项的状态。点击单选框时,会触发 clickFn 方法,根据 checkRadioFlag 的值来判断是否清空选中项,并通过 emit 方法向父组件发送更新事件。当选中项发生变化时,会触发 changeFn 方法,同样通过 emit 方法向父组件发送更新事件。当选中项发生变化时,会触发 changeFn 方法,同样通过 emit 方法向父组件发送 change 事件。
<template><div><van-radio-group v-bind="$attrs" :direction="$attrs.direction" :disabled="disabled" v-model="checked" @change="changeFn"><van-radio :name="item.name" @click="clickFn" v-for="item in options" :key="item.name">{{ item.label }}</van-radio></van-radio-group></div>
</template>
<script>
export default {props: {required: {type: Boolean,},disabled: {type: Boolean,},options: {type: Array,},},data() {return {checked: "",checkRadioFlag: false,};},methods: {clickFn() {if (this.checkRadioFlag) {this.checked = "";}this.checkRadioFlag = true;this.$emit("update:model", this.checked);},changeFn() {this.checkRadioFlag = false;this.$emit("change", this.checked);},},
};
</script>使用文件
这个组件中使用了一个名为 vRadio 的自定义组件来实现单选框的功能。vRadio 组件接受两个 props:options(选项数组)和 direction(单选框的排列方向)。在组件的 data 属性中,定义了 value 和 radioList 两个属性,分别用来保存选中项的值和选项数组的数据。vRadio 组件通过 props 接收 options 和 direction,并使用 v-bind 指令将其传递给 van-radio-group 组件和 van-radio 组件。vRadio 组件还使用了 model.sync 来实现双向绑定,将选中项的值保存在 value 属性中。通过使用 vant 框架提供的组件来实现单选框的功能,并通过 props 和 data 属性来传递和保存选项和选中项的数据。同时,通过事件和双向绑定来实现选中项的更新和变化的通知。
<template><div><vRadio :options="radioLsit" :direction="`horizontal`" :model.sync="value" /></div>
</template><script>
import vRadio from "@/components/vRadio/index";export default {components: {vRadio,},data() {return {value: "",radioLsit: [{name: "1",label: "是",},{name: "2",label: "否",},],};},
};
</script>
实现效果
