当前位置:首页 > VUE

vue 实现点击选中

2026-03-28 07:03:36VUE

Vue 实现点击选中功能

在 Vue 中实现点击选中功能可以通过多种方式完成,以下是几种常见的方法:

方法一:使用 v-model 和 v-bind:class

通过绑定 class 来实现选中样式变化。

<template>
  <div>
    <div
      v-for="item in items"
      :key="item.id"
      @click="selectedItem = item.id"
      :class="{ 'selected': selectedItem === item.id }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ],
      selectedItem: null
    };
  }
};
</script>

<style>
.selected {
  background-color: #f0f0f0;
  border: 1px solid #ccc;
}
</style>

方法二:使用计算属性

通过计算属性动态判断是否选中。

<template>
  <div>
    <div
      v-for="item in items"
      :key="item.id"
      @click="toggleSelect(item.id)"
      :class="isSelected(item.id)"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ],
      selectedItem: null
    };
  },
  methods: {
    toggleSelect(id) {
      this.selectedItem = id;
    }
  },
  computed: {
    isSelected() {
      return (id) => ({
        selected: this.selectedItem === id
      });
    }
  }
};
</script>

<style>
.selected {
  background-color: #f0f0f0;
  border: 1px solid #ccc;
}
</style>

方法三:使用数组存储多个选中项

如果需要支持多选,可以通过数组存储选中项。

<template>
  <div>
    <div
      v-for="item in items"
      :key="item.id"
      @click="toggleMultiSelect(item.id)"
      :class="{ 'selected': selectedItems.includes(item.id) }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ],
      selectedItems: []
    };
  },
  methods: {
    toggleMultiSelect(id) {
      const index = this.selectedItems.indexOf(id);
      if (index === -1) {
        this.selectedItems.push(id);
      } else {
        this.selectedItems.splice(index, 1);
      }
    }
  }
};
</script>

<style>
.selected {
  background-color: #f0f0f0;
  border: 1px solid #ccc;
}
</style>

方法四:使用 Vuex 管理选中状态

如果项目中使用 Vuex,可以通过全局状态管理选中项。

vue 实现点击选中

// store.js
export default new Vuex.Store({
  state: {
    selectedItem: null
  },
  mutations: {
    setSelectedItem(state, payload) {
      state.selectedItem = payload;
    }
  }
});
<template>
  <div>
    <div
      v-for="item in items"
      :key="item.id"
      @click="$store.commit('setSelectedItem', item.id)"
      :class="{ 'selected': $store.state.selectedItem === item.id }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    };
  }
};
</script>

<style>
.selected {
  background-color: #f0f0f0;
  border: 1px solid #ccc;
}
</style>

以上方法可以根据具体需求选择适合的实现方式。

标签: vue
分享给朋友:

相关文章

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式数…

vue实现图册

vue实现图册

Vue实现图册功能 在Vue中实现图册功能通常涉及图片展示、切换、缩放等交互效果。以下是常见的实现方法和关键代码示例: 基础图册组件结构 使用Vue单文件组件构建基础结构: <templat…

vue 实现评分

vue 实现评分

Vue 实现评分功能 在 Vue 中实现评分功能可以通过多种方式完成,包括使用第三方组件库或自定义实现。以下是两种常见的方法: 使用第三方组件库(如 Element UI) Element UI 提…

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…