vue重写radio组件

无论是在Web应用程序还是移动应用程序上,单选按钮组件都是很常见的元素。Vue.js作为一个流行的JavaScript前端框架,自带着一个原生的单选按钮组件。这个组件预置了一些默认样式和特性,但使用者需要明确的定义每个单选按钮的值和标签内容。但是,如果开发者需要在不同的项目中都使用同一个单选按钮组件,或需要根据自己的需求对现有的单选按钮组件进行修改,要怎样做呢?

vue重写radio组件

基于上述的需求考虑,我们可以自定义一个单选按钮组件,来覆盖框架内置的原生组件。这不仅可以让我们在不同的项目之间快速复用组件,在一定程度上解耦了代码,也可以提供更多的自定义功能,让组件更完美地适应不同的需求。

在Vue.js中,单选按钮组件的实现相对简单,在大多数情况下,只需要在模板中引入input[type=radio]标签就可以得到一个单选按钮,同时定义v-model来掌控组件的值和状态:


<template>
  <input
    type="radio"
    :value="value"
    :id="id"
    :name="name"
    :checked="isChecked"
    @change="handleChange($event)"
  />
  <label :for="id">{{label}}</label>
</template>

<script>
export default {
  name: 'Radio',props: {
    value: [String,Number],label: [String,name: String,id: String
  },data() {
    return {
      isChecked: false
    }
  },methods: {
    handleChange(e) {
      this.$emit('update:modelValue',e.target.value)
    }
  },watch: {
    value: {
      immediate: true,handler(val) {
        this.isChecked = val === this.value
      }
    },isChecked(val) {
      if (val) {
        this.$emit('update:modelValue',this.value)
      }
    }
  }
}
</script>

在这个代码中,我们生成了一个input[type=radio]标签,并用v-model将它的选中状态和我们传进来的value变量关联起来。为了让组件状态从逻辑上分离出来,我们使用了data中的isChecked来控制输入的选中状态。

我们还定义了处理函数handleChange,在输入框状态改变时更新isChecked的值;同理,在isChecked变化时来更新组件的值。这样一来,我们的组件所起到的作用就是传递数据的中间角色。我们的父组件通过v-model来掌握子组件的值,而子组件通过$emit事件来通知父组件更新数据。

尽管Vue.js的单选按钮组件看上去并不高级,但是了解和掌握其工作原理对于前端开发人员是非常重要的。更多时候,我们都会在原有的组件基础上加工扩展,并不仅仅是简单地“套”一个组件。这时候,设计良好的组件架构就显得尤为关键。

相关文章

这篇文章我们将通过debug源码的方式来带你搞清楚defineAsync...
欧阳老老实实的更新自己的高质量vue源码文章,还被某2.6k st...
前言 在Vue3.5版本中响应式 Props 解构终于正式转正了,这个...
组合式 (Composition) API 的一大特点是“非常灵活”,但也因...
相信你最近应该看到了不少介绍Vue Vine的文章,这篇文章我们...
前言 在欧阳的上一篇 这应该是全网最详细的Vue3.5版本解读文...