当前位置:首页 > VUE

vue实现多标签选择

2026-01-22 17:19:32VUE

Vue 实现多标签选择

使用 v-model 和数组绑定

在 Vue 中,可以通过 v-model 绑定一个数组来实现多标签选择。适用于 checkbox 或自定义多选组件。

<template>
  <div>
    <label v-for="tag in availableTags" :key="tag">
      <input type="checkbox" v-model="selectedTags" :value="tag">
      {{ tag }}
    </label>
    <p>已选择: {{ selectedTags }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      availableTags: ['前端', '后端', '移动端', '数据库'],
      selectedTags: []
    }
  }
}
</script>

使用第三方组件库

对于更复杂的需求,可以使用现成的 UI 库如 Element UI、Ant Design Vue 等提供的多选标签组件。

vue实现多标签选择

以 Element UI 为例:

vue实现多标签选择

<template>
  <el-select v-model="selectedTags" multiple placeholder="请选择标签">
    <el-option
      v-for="tag in availableTags"
      :key="tag"
      :label="tag"
      :value="tag">
    </el-option>
  </el-select>
</template>

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

自定义标签选择组件

如果需要完全自定义的交互,可以封装一个标签选择组件:

<template>
  <div class="tag-selector">
    <div class="selected-tags">
      <span v-for="(tag, index) in selectedTags" :key="index" class="tag">
        {{ tag }}
        <button @click="removeTag(index)">×</button>
      </span>
    </div>
    <input 
      type="text" 
      v-model="newTag"
      @keydown.enter="addTag"
      placeholder="输入标签后按回车">
  </div>
</template>

<script>
export default {
  props: {
    value: Array
  },
  data() {
    return {
      newTag: ''
    }
  },
  computed: {
    selectedTags: {
      get() { return this.value },
      set(val) { this.$emit('input', val) }
    }
  },
  methods: {
    addTag() {
      if (this.newTag.trim() && !this.selectedTags.includes(this.newTag)) {
        this.selectedTags = [...this.selectedTags, this.newTag.trim()]
        this.newTag = ''
      }
    },
    removeTag(index) {
      this.selectedTags.splice(index, 1)
    }
  }
}
</script>

<style>
.tag {
  display: inline-block;
  margin: 0 5px 5px 0;
  padding: 3px 8px;
  background: #eee;
  border-radius: 3px;
}
</style>

使用 Vuex 管理标签状态

对于全局共享的标签数据,可以结合 Vuex 管理:

// store.js
export default new Vuex.Store({
  state: {
    selectedTags: []
  },
  mutations: {
    addTag(state, tag) {
      if (!state.selectedTags.includes(tag)) {
        state.selectedTags.push(tag)
      }
    },
    removeTag(state, index) {
      state.selectedTags.splice(index, 1)
    }
  }
})
<template>
  <div>
    <input 
      type="text"
      v-model="newTag"
      @keydown.enter="addTag">
    <div v-for="(tag, index) in selectedTags" :key="index">
      {{ tag }}
      <button @click="removeTag(index)">删除</button>
    </div>
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'

export default {
  data() {
    return {
      newTag: ''
    }
  },
  computed: {
    ...mapState(['selectedTags'])
  },
  methods: {
    ...mapMutations(['addTag', 'removeTag']),
    addTag() {
      if (this.newTag.trim()) {
        this.$store.commit('addTag', this.newTag.trim())
        this.newTag = ''
      }
    }
  }
}
</script>

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

相关文章

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template&…

vue实现计时

vue实现计时

Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的方法: 使用 setInterval 实现基础计时器 通过 setInterval 和 clearInterv…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue实现拖放

vue实现拖放

Vue 实现拖放功能 Vue 中实现拖放功能通常可以通过 HTML5 的原生拖放 API 或第三方库(如 vuedraggable)来实现。以下是两种方法的详细说明。 使用 HTML5 原生拖放 A…

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from…