当前位置:首页 > VUE

vue排他思想实现

2026-03-28 04:16:25VUE

vue排他思想实现

vue排他思想实现

Vue 排他思想实现方法

排他思想的核心是确保同一时间只有一个元素被激活或选中。Vue 中可以通过多种方式实现这种逻辑。

方法一:使用 v-forv-if 结合

<template>
  <div>
    <button 
      v-for="(item, index) in items" 
      :key="index"
      @click="selectItem(index)"
      :class="{ active: selectedIndex === index }"
    >
      {{ item }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['选项1', '选项2', '选项3'],
      selectedIndex: -1
    }
  },
  methods: {
    selectItem(index) {
      this.selectedIndex = index
    }
  }
}
</script>

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

方法二:使用计算属性

<template>
  <div>
    <button 
      v-for="(item, index) in items" 
      :key="index"
      @click="selectedItem = item"
      :class="{ active: isActive(item) }"
    >
      {{ item }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['选项1', '选项2', '选项3'],
      selectedItem: null
    }
  },
  computed: {
    isActive() {
      return (item) => item === this.selectedItem
    }
  }
}
</script>

方法三:使用 Vuex 状态管理

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

方法四:使用自定义指令

// main.js
Vue.directive('exclusive', {
  bind(el, binding, vnode) {
    el.addEventListener('click', () => {
      const group = binding.arg || 'default'
      const value = binding.value
      vnode.context.$exclusive[group] = value
    })
  },
  update(el, binding, vnode) {
    const group = binding.arg || 'default'
    const value = binding.value
    el.classList.toggle('active', vnode.context.$exclusive[group] === value)
  }
})

Vue.prototype.$exclusive = {}
<template>
  <div>
    <button 
      v-exclusive:group1="'option1'"
      @click="$exclusive.group1 = 'option1'"
    >选项1</button>
    <button 
      v-exclusive:group1="'option2'"
      @click="$exclusive.group1 = 'option2'"
    >选项2</button>
  </div>
</template>

方法五:使用事件总线

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()
<template>
  <div>
    <button 
      v-for="(item, index) in items" 
      :key="index"
      @click="emitSelection(item)"
      :class="{ active: selectedItem === item }"
    >
      {{ item }}
    </button>
  </div>
</template>

<script>
import { EventBus } from './eventBus'
export default {
  data() {
    return {
      items: ['选项1', '选项2', '选项3'],
      selectedItem: null
    }
  },
  created() {
    EventBus.$on('item-selected', (item) => {
      this.selectedItem = item
    })
  },
  methods: {
    emitSelection(item) {
      EventBus.$emit('item-selected', item)
    }
  }
}
</script>

这些方法各有优缺点,可以根据项目复杂度和需求选择最适合的实现方式。简单场景推荐使用方法一或方法二,大型项目推荐使用方法三或方法五。

标签: 思想vue
分享给朋友:

相关文章

vue实现分屏

vue实现分屏

Vue 实现分屏的方法 分屏功能通常用于展示多个独立内容区域,以下是几种常见的实现方式: 使用 CSS Grid 布局 通过 CSS Grid 可以轻松创建分屏布局,在 Vue 组件中直接应用样式:…

vue 实现grid

vue 实现grid

在Vue中实现Grid布局可以通过多种方式完成,以下是几种常见的方法: 使用CSS Grid布局 CSS Grid是一种强大的布局系统,可以直接在Vue组件的样式中使用。以下是一个简单的示例:…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定,…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…