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