vue中el-select同时获取value和label的方式有哪些

发布时间:2023-02-23 16:31:15 作者:iii
来源:亿速云 阅读:240

Vue中el-select同时获取value和label的方式有哪些

在Vue.js开发中,el-select是Element UI库中常用的下拉选择组件。它允许用户从一组选项中选择一个或多个值。通常情况下,我们只需要获取选中项的value值,但在某些场景下,我们可能需要同时获取选中项的labelvalue。本文将详细介绍在Vue中如何通过el-select组件同时获取valuelabel的几种常见方式。

1. 使用@change事件

el-select组件提供了一个@change事件,当用户选择了一个选项时,该事件会被触发。通过监听这个事件,我们可以获取选中项的value值。为了同时获取label,我们可以利用options数组来查找对应的label

示例代码

<template>
  <div>
    <el-select v-model="selectedValue" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

2. 使用v-model绑定对象

在某些情况下,我们可能需要同时获取valuelabel,并且希望将它们对象进行绑定。可以通过将v-model绑定到一个对象来实现这一点。

示例代码

<template>
  <div>
    <el-select v-model="selectedOption" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item"
      />
    </el-select>
    <p>Selected Value: {{ selectedOption.value }}</p>
    <p>Selected Label: {{ selectedOption.label }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOption: {},
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(option) {
      this.selectedOption = option;
    },
  },
};
</script>

解释

3. 使用slot自定义选项内容

在某些情况下,我们可能需要自定义el-option的显示内容,并且希望在选择时同时获取valuelabel。可以通过使用slot来自定义选项内容,并在选择时获取所需的数据。

示例代码

<template>
  <div>
    <el-select v-model="selectedValue" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      >
        <span>{{ item.label }}</span>
        <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
      </el-option>
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

4. 使用value-key绑定复杂对象

options数组中的选项是复杂对象时,我们可以使用value-key属性来指定对象的唯一标识符。这样,el-select可以正确地处理复杂对象的绑定。

示例代码

<template>
  <div>
    <el-select v-model="selectedOption" value-key="value" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item"
      />
    </el-select>
    <p>Selected Value: {{ selectedOption.value }}</p>
    <p>Selected Label: {{ selectedOption.label }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOption: {},
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(option) {
      this.selectedOption = option;
    },
  },
};
</script>

解释

5. 使用filterableremote方法

在某些情况下,我们可能需要通过远程搜索来获取选项,并且希望在选择时同时获取valuelabel。可以通过结合filterableremote方法来实现这一点。

示例代码

<template>
  <div>
    <el-select
      v-model="selectedValue"
      filterable
      remote
      :remote-method="remoteMethod"
      @change="handleChange"
    >
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [],
    };
  },
  methods: {
    remoteMethod(query) {
      // 模拟远程搜索
      this.options = [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ].filter(option => option.label.toLowerCase().includes(query.toLowerCase()));
    },
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

6. 使用multiple多选模式

el-select的多选模式下,我们可能需要同时获取多个选中项的valuelabel。可以通过v-model绑定一个数组,并在@change事件中处理多个选中项。

示例代码

<template>
  <div>
    <el-select v-model="selectedValues" multiple @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
    <p>Selected Values: {{ selectedValues }}</p>
    <p>Selected Labels: {{ selectedLabels }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValues: [],
      selectedLabels: [],
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(values) {
      this.selectedValues = values;
      this.selectedLabels = this.options
        .filter(option => values.includes(option.value))
        .map(option => option.label);
    },
  },
};
</script>

解释

7. 使用scoped slot自定义选项内容

在某些情况下,我们可能需要更灵活地自定义el-option的显示内容,并且希望在选择时同时获取valuelabel。可以通过使用scoped slot来实现这一点。

示例代码

<template>
  <div>
    <el-select v-model="selectedValue" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      >
        <span>{{ item.label }}</span>
        <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
      </el-option>
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

8. 使用value-format格式化选项值

在某些情况下,我们可能需要对选项的value进行格式化处理,并且希望在选择时同时获取valuelabel。可以通过使用value-format属性来实现这一点。

示例代码

<template>
  <div>
    <el-select v-model="selectedValue" value-format="yyyy-MM-dd" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [
        { value: '2023-01-01', label: 'Option 1' },
        { value: '2023-02-01', label: 'Option 2' },
        { value: '2023-03-01', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

9. 使用default-first-option默认选中第一项

在某些情况下,我们可能希望在el-select加载时默认选中第一项,并且希望在选择时同时获取valuelabel。可以通过使用default-first-option属性来实现这一点。

示例代码

<template>
  <div>
    <el-select v-model="selectedValue" default-first-option @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [
        { value: '1', label: 'Option 1' },
        { value: '2', label: 'Option 2' },
        { value: '3', label: 'Option 3' },
      ],
    };
  },
  methods: {
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

10. 使用disabled禁用选项

在某些情况下,我们可能需要禁用某些选项,并且希望在选择时同时获取valuelabel。可以通过使用disabled属性来实现这一点。

示例代码

<template>
  <div>
    <el-select v-model="selectedValue" @change="handleChange">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
        :disabled="item.disabled"
      />
    </el-select>
    <p>Selected Value: {{ selectedValue }}</p>
    <p>Selected Label: {{ selectedLabel }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedValue: '',
      selectedLabel: '',
      options: [
        { value: '1', label: 'Option 1', disabled: false },
        { value: '2', label: 'Option 2', disabled: true },
        { value: '3', label: 'Option 3', disabled: false },
      ],
    };
  },
  methods: {
    handleChange(value) {
      this.selectedValue = value;
      const selectedOption = this.options.find(option => option.value === value);
      this.selectedLabel = selectedOption ? selectedOption.label : '';
    },
  },
};
</script>

解释

结论

在Vue.js开发中,el-select是一个非常强大的下拉选择组件。通过不同的方式,我们可以灵活地获取选中项的valuelabel。无论是通过@change事件、v-model绑定对象、slot自定义选项内容,还是使用value-keyfilterableremote等方法,我们都可以根据具体需求选择合适的方式来实现同时获取valuelabel的功能。希望本文的介绍能够帮助你在实际开发中更好地使用el-select组件。

推荐阅读:
  1. 使用vue怎么实现一个转盘抽奖功能
  2. react和vue的区别有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue value label

上一篇:idea中的Maven导包失败问题如何解决

下一篇:SpringBoot整合Spring Security过滤器链加载执行流程是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》