当前位置:首页 > 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 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout()…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</p&…