当前位置:首页 > VUE

vue实现点击选中

2026-01-19 09:16:54VUE

Vue 实现点击选中效果

使用 v-bind 和 v-on 实现基础选中

通过 v-bind:class 动态绑定样式类,结合 v-on:click 切换选中状态。在数据中定义 selected 变量控制选中状态:

<template>
  <div 
    :class="{ 'active': selected }" 
    @click="selected = !selected"
  >
    点击切换选中状态
  </div>
</template>

<script>
export default {
  data() {
    return {
      selected: false
    }
  }
}
</script>

<style>
.active {
  background-color: #42b983;
  color: white;
}
</style>

列表项单选选中

对于列表场景,通过维护一个 selectedId 实现单选效果:

vue实现点击选中

<template>
  <div v-for="item in items" :key="item.id">
    <div 
      :class="{ 'active': selectedId === item.id }"
      @click="selectedId = item.id"
    >
      {{ item.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedId: null,
      items: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' }
      ]
    }
  }
}
</script>

列表项多选选中

使用数组存储多个选中项,通过 includes 方法判断是否选中:

vue实现点击选中

<template>
  <div v-for="item in items" :key="item.id">
    <div 
      :class="{ 'active': selectedIds.includes(item.id) }"
      @click="toggleSelection(item.id)"
    >
      {{ item.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedIds: [],
      items: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' }
      ]
    }
  },
  methods: {
    toggleSelection(id) {
      const index = this.selectedIds.indexOf(id)
      index === -1 
        ? this.selectedIds.push(id) 
        : this.selectedIds.splice(index, 1)
    }
  }
}
</script>

使用计算属性优化

对于复杂选中逻辑,可以使用计算属性:

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

<script>
export default {
  computed: {
    getItemClass() {
      return (id) => ({
        'active': this.selectedIds.includes(id),
        'disabled': this.disabledIds.includes(id)
      })
    }
  }
}
</script>

结合 Vuex 管理状态

当选中状态需要跨组件共享时,使用 Vuex 存储选中状态:

// store.js
export default new Vuex.Store({
  state: {
    selectedItems: []
  },
  mutations: {
    TOGGLE_SELECTION(state, id) {
      const index = state.selectedItems.indexOf(id)
      index === -1 
        ? state.selectedItems.push(id) 
        : state.selectedItems.splice(index, 1)
    }
  }
})
<template>
  <div @click="$store.commit('TOGGLE_SELECTION', item.id)">
    {{ item.name }}
  </div>
</template>

这些方法覆盖了从基础到进阶的点击选中实现方案,可根据具体场景选择合适的方式。

标签: vue
分享给朋友:

相关文章

vue实现压缩上传文件

vue实现压缩上传文件

压缩上传文件的实现方法 在Vue中实现文件压缩和上传功能,可以通过以下步骤完成。该方法结合了前端文件压缩库和HTTP请求,确保文件在上传前被有效压缩。 安装必要的依赖 需要使用compressor…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm inst…

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…