当前位置:首页 > VUE

vue实现复选功能

2026-01-15 05:29:42VUE

Vue 实现复选功能

基础实现

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

vue实现复选功能

<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 实现双向绑定。

vue实现复选功能

<!-- 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 美化复选框,可以隐藏原生输入框,使用自定义样式。

<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.js) 创建注册表单组件 使用Vue的单文件组件结构,包含用户名、邮箱、密码等输入框,并添加表单验证逻辑。 <template> <form…

vue实现倍速播放功能

vue实现倍速播放功能

实现倍速播放功能的方法 在Vue中实现倍速播放功能通常涉及HTML5的<video>元素或第三方播放器库(如video.js)的API调用。以下是具体实现方式: 使用原生HTML5 vi…

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过comp…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

vue实现插件功能

vue实现插件功能

Vue 插件实现方法 安装与注册插件 在 Vue 项目中,插件通常以独立模块形式存在。通过 Vue.use() 方法注册插件,该方法会自动调用插件的 install 函数。 // 引入插件 imp…