前言
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>