当前位置:首页 > VUE

vue实现列表高亮

2026-02-19 19:58:06VUE

Vue 实现列表高亮的方法

动态绑定 class 实现高亮

通过 v-bind:class 动态绑定类名,根据条件判断是否添加高亮样式。在模板中使用 :class 绑定一个对象,对象的键为类名,值为布尔表达式。

<template>
  <ul>
    <li 
      v-for="(item, index) in list" 
      :key="index"
      :class="{ 'highlight': index === activeIndex }"
      @click="activeIndex = index"
    >
      {{ item }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: ['Item 1', 'Item 2', 'Item 3'],
      activeIndex: -1
    }
  }
}
</script>

<style>
.highlight {
  background-color: yellow;
}
</style>

使用计算属性管理高亮状态

对于更复杂的高亮逻辑,可以使用计算属性返回类名对象或数组。计算属性能够根据响应式数据自动更新高亮状态。

vue实现列表高亮

<template>
  <ul>
    <li 
      v-for="(item, index) in list" 
      :key="index"
      :class="getHighlightClass(index)"
      @click="activeIndex = index"
    >
      {{ item }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: ['Item 1', 'Item 2', 'Item 3'],
      activeIndex: -1
    }
  },
  computed: {
    getHighlightClass() {
      return (index) => ({
        'highlight': index === this.activeIndex,
        'bold-text': index % 2 === 0
      })
    }
  }
}
</script>

<style>
.highlight {
  background-color: yellow;
}
.bold-text {
  font-weight: bold;
}
</style>

使用数组语法绑定多个类名

通过数组语法可以同时绑定多个类名,结合对象语法实现更灵活的高亮控制。

vue实现列表高亮

<template>
  <ul>
    <li 
      v-for="(item, index) in list" 
      :key="index"
      :class="['list-item', { 'highlight': index === activeIndex }]"
      @click="activeIndex = index"
    >
      {{ item }}
    </li>
  </ul>
</template>

<style>
.list-item {
  padding: 8px;
  margin: 4px;
}
.highlight {
  background-color: #ffeb3b;
}
</style>

使用内联样式实现高亮

通过 v-bind:style 动态绑定样式对象,直接修改元素的样式属性实现高亮效果。

<template>
  <ul>
    <li 
      v-for="(item, index) in list" 
      :key="index"
      :style="index === activeIndex ? highlightStyle : {}"
      @click="activeIndex = index"
    >
      {{ item }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: ['Item 1', 'Item 2', 'Item 3'],
      activeIndex: -1,
      highlightStyle: {
        backgroundColor: 'yellow',
        fontWeight: 'bold'
      }
    }
  }
}
</script>

高亮当前路由匹配的菜单项

在导航菜单中高亮当前路由匹配的菜单项,可以使用 vue-routerrouter-linkactive-class 属性。

<template>
  <ul>
    <router-link
      v-for="(item, index) in menuItems"
      :key="index"
      :to="item.path"
      active-class="highlight"
      tag="li"
    >
      {{ item.title }}
    </router-link>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { title: 'Home', path: '/' },
        { title: 'About', path: '/about' },
        { title: 'Contact', path: '/contact' }
      ]
    }
  }
}
</script>

<style>
.highlight {
  background-color: #4CAF50;
  color: white;
}
</style>

以上方法可以根据具体需求选择使用,动态绑定类名是最常用的实现方式,适合大多数高亮场景。

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

相关文章

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &l…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue最佳实现

vue最佳实现

Vue 最佳实践 组件设计 组件应遵循单一职责原则,每个组件只负责一个功能模块。命名采用 PascalCase(如 UserProfile.vue),模板中使用 kebab-case(如 <us…

mvvm实现vue

mvvm实现vue

MVVM 模式在 Vue 中的实现 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 的设计灵感来源于此。以下是 MVVM 在 Vue 中的核心实现方式: 数据绑定(M…

vue怎么实现 tab

vue怎么实现 tab

Vue 实现 Tab 的方法 使用动态组件和 v-if 通过动态组件或 v-if 指令切换不同 Tab 内容,结合点击事件改变当前激活的 Tab。 <template> &l…