当前位置:首页 > VUE

vue实现标签筛选

2026-03-30 10:05:59VUE

Vue 实现标签筛选功能

标签筛选功能通常用于分类展示数据,用户可以通过点击标签来筛选内容。以下是一个基于 Vue 的实现方案。

数据准备

定义一个包含标签和对应数据的数组:

data() {
  return {
    tags: ['全部', '标签1', '标签2', '标签3'],
    items: [
      { id: 1, name: '项目1', tag: '标签1' },
      { id: 2, name: '项目2', tag: '标签2' },
      { id: 3, name: '项目3', tag: '标签3' },
      { id: 4, name: '项目4', tag: '标签1' }
    ],
    activeTag: '全部'
  }
}

标签渲染

使用 v-for 渲染标签列表,并通过 v-bind:class 动态绑定激活状态的样式:

vue实现标签筛选

<div class="tag-container">
  <span 
    v-for="tag in tags" 
    :key="tag"
    @click="activeTag = tag"
    :class="{ 'active': activeTag === tag }"
  >
    {{ tag }}
  </span>
</div>

内容筛选

通过计算属性实现筛选逻辑:

computed: {
  filteredItems() {
    if (this.activeTag === '全部') {
      return this.items
    }
    return this.items.filter(item => item.tag === this.activeTag)
  }
}

内容展示

使用 v-for 渲染筛选后的内容:

vue实现标签筛选

<div class="item-list">
  <div v-for="item in filteredItems" :key="item.id">
    {{ item.name }}
  </div>
</div>

样式示例

为标签和激活状态添加基础样式:

.tag-container span {
  display: inline-block;
  margin: 5px;
  padding: 5px 10px;
  cursor: pointer;
  border-radius: 3px;
  background: #f0f0f0;
}

.tag-container span.active {
  background: #409eff;
  color: white;
}

完整组件示例

<template>
  <div>
    <div class="tag-container">
      <span 
        v-for="tag in tags" 
        :key="tag"
        @click="activeTag = tag"
        :class="{ 'active': activeTag === tag }"
      >
        {{ tag }}
      </span>
    </div>

    <div class="item-list">
      <div v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tags: ['全部', '标签1', '标签2', '标签3'],
      items: [
        { id: 1, name: '项目1', tag: '标签1' },
        { id: 2, name: '项目2', tag: '标签2' },
        { id: 3, name: '项目3', tag: '标签3' },
        { id: 4, name: '项目4', tag: '标签1' }
      ],
      activeTag: '全部'
    }
  },
  computed: {
    filteredItems() {
      if (this.activeTag === '全部') {
        return this.items
      }
      return this.items.filter(item => item.tag === this.activeTag)
    }
  }
}
</script>

<style>
.tag-container span {
  display: inline-block;
  margin: 5px;
  padding: 5px 10px;
  cursor: pointer;
  border-radius: 3px;
  background: #f0f0f0;
}

.tag-container span.active {
  background: #409eff;
  color: white;
}
</style>

进阶优化

对于更复杂的场景,可以考虑以下优化:

  • 使用 Vuex 管理标签状态
  • 添加动画过渡效果
  • 实现多标签组合筛选
  • 支持标签的增删改查功能

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

相关文章

vue实现多级表头

vue实现多级表头

Vue 实现多级表头的方法 使用 el-table 组件 Element UI 的 el-table 组件支持多级表头的实现,通过嵌套 el-table-column 即可完成。 <el-ta…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…