当前位置:首页 > VUE

vue实现多标签选择

2026-02-23 08:08:58VUE

Vue 实现多标签选择

基本实现思路

在 Vue 中实现多标签选择功能,可以通过以下方式完成。核心是利用 v-model 绑定数组来存储选中的标签值,结合 v-for 渲染标签选项。

<template>
  <div>
    <div v-for="tag in availableTags" :key="tag">
      <input
        type="checkbox"
        :id="tag"
        :value="tag"
        v-model="selectedTags"
      />
      <label :for="tag">{{ tag }}</label>
    </div>
    <p>已选标签: {{ selectedTags.join(', ') }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      availableTags: ['Vue', 'React', 'Angular', 'Svelte'],
      selectedTags: []
    };
  }
};
</script>

封装为可复用组件

可以将多标签选择功能封装为独立组件,提高复用性。

<template>
  <div>
    <div v-for="tag in tags" :key="tag.value">
      <input
        type="checkbox"
        :id="tag.value"
        :value="tag.value"
        v-model="selectedValues"
      />
      <label :for="tag.value">{{ tag.label }}</label>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    tags: {
      type: Array,
      required: true,
      default: () => []
    },
    value: {
      type: Array,
      default: () => []
    }
  },
  computed: {
    selectedValues: {
      get() {
        return this.value;
      },
      set(newVal) {
        this.$emit('input', newVal);
      }
    }
  }
};
</script>

使用第三方组件库

如果不想手动实现,可以直接使用现成的第三方组件库:

  1. Element UIel-checkbox-group

    <el-checkbox-group v-model="selectedTags">
    <el-checkbox v-for="tag in availableTags" :label="tag" :key="tag"></el-checkbox>
    </el-checkbox-group>
  2. Vuetifyv-checkbox

    <v-checkbox
    v-for="tag in availableTags"
    :key="tag"
    v-model="selectedTags"
    :label="tag"
    :value="tag"
    ></v-checkbox>

添加搜索过滤功能

对于大量标签的情况,可以添加搜索框过滤选项:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索标签..." />
    <div v-for="tag in filteredTags" :key="tag">
      <input
        type="checkbox"
        :id="tag"
        :value="tag"
        v-model="selectedTags"
      />
      <label :for="tag">{{ tag }}</label>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      availableTags: ['Vue', 'React', 'Angular', 'Svelte'],
      selectedTags: [],
      searchQuery: ''
    };
  },
  computed: {
    filteredTags() {
      return this.availableTags.filter(tag =>
        tag.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  }
};
</script>

样式优化

使用 CSS 美化标签选择界面,例如将标签显示为按钮样式:

vue实现多标签选择

<template>
  <div class="tag-selector">
    <div
      v-for="tag in availableTags"
      :key="tag"
      class="tag"
      :class="{ active: selectedTags.includes(tag) }"
      @click="toggleTag(tag)"
    >
      {{ tag }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      availableTags: ['Vue', 'React', 'Angular', 'Svelte'],
      selectedTags: []
    };
  },
  methods: {
    toggleTag(tag) {
      const index = this.selectedTags.indexOf(tag);
      if (index === -1) {
        this.selectedTags.push(tag);
      } else {
        this.selectedTags.splice(index, 1);
      }
    }
  }
};
</script>

<style>
.tag-selector {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.tag {
  padding: 6px 12px;
  background: #eee;
  border-radius: 4px;
  cursor: pointer;
}
.tag.active {
  background: #42b983;
  color: white;
}
</style>

这些方法提供了从基础到进阶的多标签选择实现方案,可以根据项目需求选择适合的方式。

标签: 标签vue
分享给朋友:

相关文章

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为fa…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…

vue nexttick 实现

vue nexttick 实现

Vue nextTick 实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它主要用于确保在 DOM 更新完成后执行某些操作。 核心实现机制 ne…