当前位置:首页 > VUE

vue排他思想实现

2026-03-07 18:08:39VUE

排他思想的基本概念

排他思想指在交互中,同一时间只有一个元素保持激活状态(如选项卡、菜单项)。Vue 可通过数据驱动和条件渲染高效实现这一逻辑。

实现方法一:v-if 与动态数据

通过 v-ifv-show 控制显示,结合数据状态管理当前选中项:

<template>
  <div>
    <button @click="activeTab = 'tab1'">Tab 1</button>
    <button @click="activeTab = 'tab2'">Tab 2</button>

    <div v-if="activeTab === 'tab1'">Content 1</div>
    <div v-if="activeTab === 'tab2'">Content 2</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeTab: 'tab1'
    };
  }
};
</script>

实现方法二:列表渲染与索引

处理动态列表时,通过索引或唯一标识对比当前选中项:

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

    <div v-if="currentIndex !== null">
      {{ items[currentIndex].content }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: 'Item 1', content: 'Content 1' },
        { name: 'Item 2', content: 'Content 2' }
      ],
      currentIndex: 0
    };
  }
};
</script>

实现方法三:组件化封装

将逻辑封装为可复用组件,通过 propsemit 传递状态:

<!-- Tabs.vue -->
<template>
  <div>
    <slot :activeTab="activeTab" :setActiveTab="setActiveTab"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeTab: null
    };
  },
  methods: {
    setActiveTab(tab) {
      this.activeTab = tab;
    }
  }
};
</script>

父组件调用示例:

vue排他思想实现

<template>
  <Tabs>
    <template #default="{ activeTab, setActiveTab }">
      <button @click="setActiveTab('tab1')">Tab 1</button>
      <button @click="setActiveTab('tab2')">Tab 2</button>
      <div v-if="activeTab === 'tab1'">Content 1</div>
      <div v-if="activeTab === 'tab2'">Content 2</div>
    </template>
  </Tabs>
</template>

注意事项

  • 性能优化:频繁切换时优先使用 v-show 而非 v-if,避免重复渲染。
  • 无障碍访问:为激活项添加 aria-selected 属性,增强可访问性。
  • 状态管理:复杂场景可结合 Vuex 或 Pinia 全局管理激活状态。

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

相关文章

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } },…

vue实现必填

vue实现必填

Vue 实现表单必填验证的方法 在Vue中实现表单必填验证可以通过多种方式完成,以下是几种常见的方法: 使用HTML5原生属性 最简单的必填验证可以通过HTML5的required属性实现: &l…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…

不用vue实现spa

不用vue实现spa

使用原生 JavaScript 实现 SPA 通过监听 URL 变化动态加载内容,结合 history.pushState 或 hashchange 事件实现路由切换。 // 路由配置 const…

vue实现展开收缩

vue实现展开收缩

Vue实现展开收缩功能 使用Vue实现展开收缩功能可以通过v-show或v-if指令结合点击事件来控制元素的显示与隐藏。以下提供几种常见实现方式: 基础实现(v-show) <template…

vue实现声光弹窗

vue实现声光弹窗

Vue 实现声光弹窗的方法 使用 Vue 自定义组件 创建一个独立的弹窗组件,包含声光效果。通过 v-if 或 v-show 控制弹窗显示,利用 CSS 动画实现闪光效果,通过 Audio API 播…