当前位置:首页 > VUE

vue实现选项排他

2026-01-19 09:01:44VUE

Vue实现选项排他逻辑

使用Vue实现选项排他(即单选效果)可以通过数据绑定和事件监听实现。以下是几种常见方法:

使用v-model绑定

通过v-model绑定到同一个变量,天然实现排他效果:

<template>
  <div>
    <input type="radio" id="option1" value="option1" v-model="selectedOption">
    <label for="option1">选项1</label>

    <input type="radio" id="option2" value="option2" v-model="selectedOption">
    <label for="option2">选项2</label>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOption: ''
    }
  }
}
</script>

使用自定义逻辑

对于非radio元素(如按钮),可通过计算属性或方法实现:

<template>
  <div>
    <button 
      v-for="option in options"
      :key="option.value"
      @click="selectOption(option.value)"
      :class="{ active: selectedOption === option.value }"
    >
      {{ option.label }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        { value: 'opt1', label: '选项1' },
        { value: 'opt2', label: '选项2' }
      ],
      selectedOption: null
    }
  },
  methods: {
    selectOption(value) {
      this.selectedOption = value
    }
  }
}
</script>

使用Vuex状态管理

当需要跨组件共享选择状态时:

// store.js
export default new Vuex.Store({
  state: {
    selectedOption: null
  },
  mutations: {
    setOption(state, payload) {
      state.selectedOption = payload
    }
  }
})
<template>
  <button @click="$store.commit('setOption', 'opt1')">选项1</button>
</template>

动态选项排他实现

对于动态生成的选项列表,可以使用v-for结合上述方法:

<template>
  <div>
    <div 
      v-for="item in items"
      :key="item.id"
      @click="selectItem(item.id)"
      :class="{ selected: selectedId === item.id }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: '动态选项1' },
        { id: 2, text: '动态选项2' }
      ],
      selectedId: null
    }
  },
  methods: {
    selectItem(id) {
      this.selectedId = id === this.selectedId ? null : id
    }
  }
}
</script>

表单验证集成

结合Vuelidate等验证库实现带验证的排他选择:

import { required } from 'vuelidate/lib/validators'

export default {
  validations: {
    selectedOption: { required }
  }
}

以上方法均可根据实际场景组合使用,关键点在于维护单一数据源并通过响应式更新UI状态。

vue实现选项排他

标签: 选项vue
分享给朋友:

相关文章

vue实现签名

vue实现签名

实现Vue签名功能的步骤 安装签名库 使用vue-signature库可以快速实现签名功能。通过npm或yarn安装: npm install vue-signature --save # 或 y…

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ {…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

vue 路由 实现

vue 路由 实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的详细步骤: 安装 Vue Router 通过 npm 或 y…