当前位置:首页 > VUE

vue实现复选功能

2026-01-15 05:29:42VUE

Vue 实现复选功能

基础实现

使用 v-model 绑定到数组实现多选功能。当复选框被选中时,其 value 会被添加到数组中;取消选中时,会从数组中移除。

<template>
  <div>
    <label v-for="option in options" :key="option.value">
      <input 
        type="checkbox" 
        v-model="selectedOptions" 
        :value="option.value"
      >
      {{ option.label }}
    </label>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        { value: 'apple', label: 'Apple' },
        { value: 'banana', label: 'Banana' },
        { value: 'orange', label: 'Orange' }
      ],
      selectedOptions: []
    }
  }
}
</script>

自定义组件

创建可复用的复选框组组件,通过 v-model 实现双向绑定。

<!-- CheckboxGroup.vue -->
<template>
  <div>
    <label v-for="option in options" :key="option.value">
      <input 
        type="checkbox" 
        :value="option.value"
        @change="handleChange"
        :checked="modelValue.includes(option.value)"
      >
      {{ option.label }}
    </label>
  </div>
</template>

<script>
export default {
  props: {
    options: {
      type: Array,
      required: true
    },
    modelValue: {
      type: Array,
      default: () => []
    }
  },
  methods: {
    handleChange(e) {
      const value = e.target.value
      let newValue = [...this.modelValue]
      if (e.target.checked) {
        newValue.push(value)
      } else {
        newValue = newValue.filter(item => item !== value)
      }
      this.$emit('update:modelValue', newValue)
    }
  }
}
</script>

使用方法

<template>
  <checkbox-group 
    v-model="selectedFruits" 
    :options="fruitOptions"
  />
</template>

<script>
import CheckboxGroup from './CheckboxGroup.vue'

export default {
  components: { CheckboxGroup },
  data() {
    return {
      fruitOptions: [
        { value: 'apple', label: 'Apple' },
        { value: 'banana', label: 'Banana' }
      ],
      selectedFruits: []
    }
  }
}
</script>

全选功能

实现全选/取消全选功能,以及部分选中状态。

<template>
  <div>
    <label>
      <input 
        type="checkbox" 
        v-model="selectAll" 
        @change="toggleAll"
      >
      Select All
    </label>

    <div v-for="option in options" :key="option.value">
      <label>
        <input 
          type="checkbox" 
          v-model="selectedOptions" 
          :value="option.value"
        >
        {{ option.label }}
      </label>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        { value: 1, label: 'Option 1' },
        { value: 2, label: 'Option 2' }
      ],
      selectedOptions: []
    }
  },
  computed: {
    selectAll: {
      get() {
        return this.selectedOptions.length === this.options.length
      },
      set(value) {
        this.selectedOptions = value ? this.options.map(opt => opt.value) : []
      }
    }
  },
  methods: {
    toggleAll() {
      this.selectAll = !this.selectAll
    }
  }
}
</script>

样式美化

使用 CSS 美化复选框,可以隐藏原生输入框,使用自定义样式。

vue实现复选功能

<template>
  <div class="checkbox-container">
    <label 
      v-for="option in options" 
      :key="option.value" 
      class="custom-checkbox"
    >
      <input 
        type="checkbox" 
        v-model="selectedOptions" 
        :value="option.value"
      >
      <span class="checkmark"></span>
      {{ option.label }}
    </label>
  </div>
</template>

<style>
.checkbox-container {
  display: flex;
  flex-direction: column;
}

.custom-checkbox {
  display: flex;
  align-items: center;
  position: relative;
  padding-left: 25px;
  cursor: pointer;
  user-select: none;
}

.custom-checkbox input {
  position: absolute;
  opacity: 0;
  cursor: pointer;
  height: 0;
  width: 0;
}

.checkmark {
  position: absolute;
  left: 0;
  height: 18px;
  width: 18px;
  background-color: #eee;
  border-radius: 3px;
}

.custom-checkbox:hover input ~ .checkmark {
  background-color: #ddd;
}

.custom-checkbox input:checked ~ .checkmark {
  background-color: #2196F3;
}

.checkmark:after {
  content: "";
  position: absolute;
  display: none;
}

.custom-checkbox input:checked ~ .checkmark:after {
  display: block;
}

.custom-checkbox .checkmark:after {
  left: 6px;
  top: 2px;
  width: 5px;
  height: 10px;
  border: solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
</style>

这些方法提供了从基础到高级的 Vue 复选功能实现,可以根据项目需求选择适合的方式。

标签: 复选功能
分享给朋友:

相关文章

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 使用Vue的单文件组件(.vue)将产品功能模块化,每个功能拆分为独立组件。例如产品列表、详情页、购物车等可分别封装为ProductList.vue、Pro…

vue实现模态功能

vue实现模态功能

Vue 实现模态框功能 方法一:使用组件和v-if/v-show控制显示 创建独立的模态框组件(如Modal.vue),通过props接收标题、内容等数据,使用v-if或v-show控制显示状态。…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

php购物车功能的实现

php购物车功能的实现

实现购物车功能的基本方法 使用PHP实现购物车功能可以通过会话(Session)或数据库存储购物车数据。以下是两种常见方法的详细说明。 使用Session存储购物车数据 PHP的$_SESSION可…

vue 实现单选功能

vue 实现单选功能

实现单选功能的方法 在Vue中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML单选按钮 通过v-model绑定数据,结合原生<input type="radio"&g…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…