当前位置:首页 > VUE

vue2.0 实现选中

2026-02-23 04:48:26VUE

Vue 2.0 实现选中功能

在 Vue 2.0 中实现选中功能可以通过多种方式完成,以下介绍几种常见的方法。

使用 v-model 绑定单选或多选

对于单选或多选场景,可以直接使用 v-model 绑定数据。

单选示例:

<template>
  <div>
    <input type="radio" id="option1" value="Option 1" v-model="selectedOption">
    <label for="option1">Option 1</label>
    <input type="radio" id="option2" value="Option 2" v-model="selectedOption">
    <label for="option2">Option 2</label>
    <p>Selected: {{ selectedOption }}</p>
  </div>
</template>

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

多选示例:

<template>
  <div>
    <input type="checkbox" id="option1" value="Option 1" v-model="selectedOptions">
    <label for="option1">Option 1</label>
    <input type="checkbox" id="option2" value="Option 2" v-model="selectedOptions">
    <label for="option2">Option 2</label>
    <p>Selected: {{ selectedOptions }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: []
    };
  }
};
</script>

动态高亮选中项

对于列表或表格中的选中项高亮,可以通过动态绑定 classstyle 实现。

vue2.0 实现选中

示例:

<template>
  <div>
    <ul>
      <li
        v-for="item in items"
        :key="item.id"
        @click="selectItem(item)"
        :class="{ 'active': selectedItem === item }"
      >
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ],
      selectedItem: null
    };
  },
  methods: {
    selectItem(item) {
      this.selectedItem = item;
    }
  }
};
</script>

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

使用计算属性处理选中逻辑

如果需要复杂的选中逻辑,可以使用计算属性动态判断选中状态。

示例:

vue2.0 实现选中

<template>
  <div>
    <button
      v-for="item in items"
      :key="item.id"
      @click="toggleSelect(item)"
      :class="{ 'selected': isSelected(item) }"
    >
      {{ item.name }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ],
      selectedItems: []
    };
  },
  methods: {
    toggleSelect(item) {
      const index = this.selectedItems.findIndex(selected => selected.id === item.id);
      if (index === -1) {
        this.selectedItems.push(item);
      } else {
        this.selectedItems.splice(index, 1);
      }
    },
    isSelected(item) {
      return this.selectedItems.some(selected => selected.id === item.id);
    }
  }
};
</script>

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

结合 Vuex 管理选中状态

如果应用状态较为复杂,可以使用 Vuex 集中管理选中状态。

示例:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    selectedItems: []
  },
  mutations: {
    toggleSelect(state, item) {
      const index = state.selectedItems.findIndex(selected => selected.id === item.id);
      if (index === -1) {
        state.selectedItems.push(item);
      } else {
        state.selectedItems.splice(index, 1);
      }
    }
  },
  getters: {
    isSelected: state => item => {
      return state.selectedItems.some(selected => selected.id === item.id);
    }
  }
});

组件中使用:

<template>
  <div>
    <button
      v-for="item in items"
      :key="item.id"
      @click="toggleSelect(item)"
      :class="{ 'selected': isSelected(item) }"
    >
      {{ item.name }}
    </button>
  </div>
</template>

<script>
import { mapGetters, mapMutations } from 'vuex';

export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    };
  },
  computed: {
    ...mapGetters(['isSelected'])
  },
  methods: {
    ...mapMutations(['toggleSelect'])
  }
};
</script>

以上方法可以根据实际需求灵活选择,实现选中功能。

分享给朋友:

相关文章

vue实现裁剪头像

vue实现裁剪头像

Vue 实现头像裁剪功能 实现头像裁剪功能通常需要结合第三方库如 cropperjs 或 vue-cropper。以下是两种常见实现方式: 使用 vue-cropper 库 安装依赖: n…

vue实现按钮刷新

vue实现按钮刷新

Vue 实现按钮刷新功能 在 Vue 中实现按钮刷新功能可以通过多种方式实现,具体取决于刷新需求是局部刷新还是全局刷新。以下是几种常见的方法: 使用 window.location.reload()…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取…

vue组件传值实现分页

vue组件传值实现分页

Vue 组件传值实现分页 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方法: 使用props和$emit 父组件通过props向子组件传递数据,子组件通过$emit…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…