返回

巧用v-model对象绑定和value-key属性解决element-ui中select组件重置问题

前端

对于下拉框组件,当需要使用options里面其他属性的时候,v-model绑定单个值无法解决需求的时候,需要绑定成对象。但是,在el-select添加value-key="id"属性,el-option添加disabled属性后,再次点击el-select,将无法重新选择。

发生这个问题的原因是,当value-key属性被设置时,v-model绑定的值将不再是单个值,而是一个对象。因此,在重置操作时,无法将v-model绑定的值重置为null,导致无法重新选择。

为了解决这个问题,我们可以使用一个computed属性来处理v-model绑定的值。具体做法如下:

<template>
  <el-select v-model="selected" value-key="id">
    <el-option
      v-for="item in options"
      :key="item.id"
      :label="item.label"
      :value="item"
    />
  </el-select>
</template>

<script>
export default {
  data() {
    return {
      options: [
        { id: 1, label: 'Option 1' },
        { id: 2, label: 'Option 2' },
        { id: 3, label: 'Option 3' },
      ],
      selected: null,
    };
  },
  computed: {
    selectedId: {
      get() {
        return this.selected ? this.selected.id : null;
      },
      set(value) {
        this.selected = this.options.find(item => item.id === value);
      },
    },
  },
};
</script>

在这个例子中,我们使用了一个名为selectedId的computed属性来处理v-model绑定的值。selectedId的getter方法返回selected对象的id,setter方法则根据给定的id查找并设置selected对象。

通过这种方式,我们可以将v-model绑定的值重置为null,从而解决无法重新选择的问题。同时,我们也可以继续使用options里面其他属性,如disabled属性。

需要注意的是,这种解决方案只适用于element-ui的select组件。对于其他组件,可能需要使用不同的解决方案。