当前位置:首页 > VUE

vue实现隔行选中

2026-03-08 23:10:58VUE

Vue 实现隔行选中功能

使用 v-for:class 动态绑定样式

通过 v-for 循环渲染列表时,利用索引值判断奇偶行,动态绑定不同的样式类。例如:

<template>
  <ul>
    <li 
      v-for="(item, index) in list" 
      :key="item.id"
      :class="{ 'even-row': index % 2 === 0, 'odd-row': index % 2 !== 0 }"
      @click="selectRow(index)"
    >
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ],
      selectedIndex: null
    }
  },
  methods: {
    selectRow(index) {
      this.selectedIndex = index
    }
  }
}
</script>

<style>
.even-row {
  background-color: #f0f0f0;
}
.odd-row {
  background-color: #ffffff;
}
.even-row.selected, .odd-row.selected {
  background-color: #d4edff;
}
</style>

通过计算属性判断选中状态

使用计算属性动态生成样式类,结合点击事件切换选中状态:

<template>
  <ul>
    <li 
      v-for="(item, index) in list" 
      :key="item.id"
      :class="rowClass(index)"
      @click="toggleSelect(index)"
    >
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ],
      selectedIndices: []
    }
  },
  methods: {
    toggleSelect(index) {
      const idx = this.selectedIndices.indexOf(index)
      if (idx >= 0) {
        this.selectedIndices.splice(idx, 1)
      } else {
        this.selectedIndices.push(index)
      }
    }
  },
  computed: {
    rowClass() {
      return (index) => ({
        'even-row': index % 2 === 0,
        'odd-row': index % 2 !== 0,
        'selected': this.selectedIndices.includes(index)
      })
    }
  }
}
</script>

使用第三方库实现复杂选择逻辑

对于更复杂的选择需求(如多选、范围选择等),可以考虑使用第三方表格组件库:

vue实现隔行选中

import { VDataTable } from 'vuetify/lib'

export default {
  components: {
    VDataTable
  },
  data() {
    return {
      headers: [
        { text: 'ID', value: 'id' },
        { text: 'Name', value: 'name' }
      ],
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ],
      selected: []
    }
  }
}
<template>
  <v-data-table
    :headers="headers"
    :items="items"
    item-key="id"
    show-select
    v-model="selected"
    class="elevation-1"
  ></v-data-table>
</template>

标签: vue
分享给朋友:

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue实现换页

vue实现换页

Vue实现页面切换的方法 在Vue中实现页面切换通常可以通过Vue Router来完成。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式:…

vue实现投票

vue实现投票

Vue实现投票功能 数据准备 在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态: data() { return { options: [ { id: 1…