elementUI select组件value值注意事项详解

yizhihongxing

下面我就为大家详细介绍一下关于 ElementUI Select 组件 value 值的注意事项。

问题出现情况

在使用 ElementUI Select 组件的时候,由于其拥有多种选择模式,可能会出现一些 value 值的问题。当我们使用可搜索的 select 时,会发现在搜索后选中某个选项后,value 值并不是我们所想要的值,而是一个对应着索引的数值。

下面就是一些具体的例子:

例子一:

在搜索了"黄"后,我们选择了"黄浦区",而 log 出来的 value 却是1,和我们期望的“黄浦区”不一致。

<template>
  <div>
    <el-select v-model="selectValue" filterable @change="handleChange">
      <el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value">
      </el-option>
    </el-select>
    <div>{{ selectValue }}</div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        selectValue: '',
        options: [
          {
            value: 'a',
            label: '徐汇区'
          },
          {
            value: 'b',
            label: '黄浦区'
          },
          {
            value: 'c',
            label: '闵行区'
          },
        ]
      }
    },
    methods: {
      handleChange(val) {
        console.log(val) // 输出1
      },
    }
  }
</script>

例子二:

在一个多选的情况下,我们选择多个选项后呼出弹窗,再次勾选其他选项后取消,这个选项就再也删不掉了。

<template>
  <div>
    <el-select v-model="selectValue" multiple filterable @remove-tag="handleRemoveTag" @visible-change="handleVisibleChange">
      <el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value">
      </el-option>
    </el-select>
    <div v-for="(value,index) in selectValue" :key="index">{{ value }}</div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        selectValue: [],
        options: [
          {
            value: 'a',
            label: '徐汇区'
          },
          {
            value: 'b',
            label: '黄浦区'
          },
          {
            value: 'c',
            label: '闵行区'
          },
        ]
      }
    },
    methods: {
      handleRemoveTag(tag) {
        const index = this.selectValue.indexOf(tag);
        if (index !== -1) {
          this.selectValue.splice(index, 1);
        }
      },
      handleVisibleChange(visible) {
        if (!visible) {
          // 在弹框中没有勾选的value值加回来
          // 假设是下标为3和下标为4未被加入
          this.selectValue.push('d', 'e');
        }
      },
    }
  }
</script>

解决方案

为了解决上面的问题,我们需要对 Select 组件的 value 值做出相关操作。经过调查和测试,我们找到了两种解决办法:

方案一:

通过给每个选项增加唯一的 key 值,再通过监听 select 组件的 @change 事件获取当前选项的值即可。可以如下修改例子一中的代码:

<template>
  <div>
    <el-select v-model="selectValue" filterable @change="handleChange">
      <el-option v-for="(item,index) in options" :key="`${item.value}-${index}`" :label="item.label" :value="item.value">
      </el-option>
    </el-select>
    <div>{{ selectValue }}</div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        selectValue: '',
        options: [
          {
            value: 'a',
            label: '徐汇区'
          },
          {
            value: 'b',
            label: '黄浦区'
          },
          {
            value: 'c',
            label: '闵行区'
          },
        ]
      }
    },
    methods: {
      handleChange(val) {
        console.log(val) // 输出"b",与我们的期望一致
      },
    }
  }
</script>

方案二:

通过监听 select 组件的 @remove-tag 事件,在事件中更新 selectValue 值即可。可以如下修改例子二中的代码:

<template>
  <div>
    <el-select v-model="selectValue" multiple filterable @remove-tag="handleRemoveTag" @visible-change="handleVisibleChange">
      <el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value">
      </el-option>
    </el-select>
    <div v-for="(value,index) in selectValue" :key="index">{{ value }}</div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        selectValue: [],
        options: [
          {
            value: 'a',
            label: '徐汇区'
          },
          {
            value: 'b',
            label: '黄浦区'
          },
          {
            value: 'c',
            label: '闵行区'
          },
        ]
      }
    },
    methods: {
      handleRemoveTag(tag) {
        const index = this.selectValue.indexOf(tag);
        if (index !== -1) {
          this.selectValue.splice(index, 1);
        }
      },
      handleVisibleChange(visible) {
        if (!visible) {
          // 在弹框中没有勾选的value值加回来
          // 假设是下标为3和下标为4未被加入
          this.selectValue.push('d', 'e');
          // 更新 selectValue 值
          this.$nextTick(() => {
            this.$refs.select.setValue(this.selectValue)
          })
        }
      },
    }
  }
</script>

总结

通过以上的两种解决方案,我们成功解决了在 ElementUI Select 组件中 value 值的问题。同时,我们应该养成好的编程习惯,为每个选项增加唯一的 key 值,并且在监听事件的时候对每个事件进行处理,这样才能保证整个应用的代码质量和性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:elementUI select组件value值注意事项详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js读写json文件实例代码

    当我们需要读写JSON文件时,我们可以使用Node.js中的fs模块进行操作。下面是使用Node.js读写JSON文件的两个示例: 示例一:读取JSON文件 首先,在JavaScript文件的开头引入 fs 模块,并使用 fs.readFileSync()方法读取JSON文件: const fs = require(‘fs’); const data = f…

    JavaScript 2023年5月27日
    00
  • JavaScript的作用域和块级作用域概念理解

    JavaScript作用域 在JavaScript中,作用域控制着变量和函数的可见性和生命周期。作用域是定义变量、函数以及访问它们的地方的一套规则。 作用域分为全局作用域和局部作用域。在函数中定义的变量、函数参数以及函数内部声明的函数都属于该函数的局部作用域。全局作用域包含了浏览器环境下的所有对象和方法,函数内部可以访问全局变量。 JavaScript作用域…

    JavaScript 2023年6月10日
    00
  • 用JS写的简单的计算器实现代码

    下面是用JS写的简单的计算器实现的完整攻略,包含两条示例说明。 标题 用JS写的简单的计算器实现代码 环境准备 在开始实现计算器之前,需要准备好以下环境: 浏览器:比如Chrome、Firefox等主流浏览器。 HTML文件:用于显示计算器界面和加载JS文件。 JS文件:用于编写实际的计算器代码。 计算器的HTML界面 首先,需要编写计算器的HTML界面。下…

    JavaScript 2023年5月28日
    00
  • js禁止页面刷新与后退的方法

    下面是“js禁止页面刷新与后退的方法”的完整攻略。 1. 禁止页面刷新的方法 1.1 使用onbeforeunload事件 onbeforeunload事件是在页面即将卸载前触发的事件,可以用来在用户离开当前页面之前做一些操作,比如弹出确认框,阻止页面刷新等等。 通过监听onbeforeunload事件,并在事件处理函数中返回一个字符串,可以让浏览器弹出一个…

    JavaScript 2023年6月11日
    00
  • JavaScript组件开发完整示例

    下面是JavaScript组件开发完整示例的攻略。 示例说明 示例1:创建一个简单的按钮组件 首先,我们要创建一个简单的按钮组件。这个组件可以接受一个标题和一个点击事件处理函数作为参数。组件将呈现一个按钮,当点击按钮时,将调用事件处理程序。以下是组件的HTML和JavaScript代码。 <button class="my-button&qu…

    JavaScript 2023年5月27日
    00
  • jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题

    在IE6、7、8中,无法使用原生的JSON.stringify函数,因此如果需要将JavaScript对象转化为JSON字符串,我们需要使用jQuery中的$.parseJSON和$.stringify方法。 下面是解决方案的完整攻略: 引入jQuery库 在或中引入jQuery库: <!DOCTYPE html> <html> &l…

    JavaScript 2023年5月27日
    00
  • java Signleton模式详解及示例代码

    当我们需要保证一个类在整个应用程序中只有一个实例时,可以采用单例模式。其中的“单例”意味着单个实例。在Java中,有多种方法可以实现单例模式,其中比较简单且常用的一种方法是使用“懒汉式”的单例模式。 什么是 Singleton 模式? Singleton 模式是设计模式的一种,它可以确保在整个应用程序中只有一个特定的实例。在Java中,Singleton模式…

    JavaScript 2023年5月28日
    00
  • 如何一步步基于element-ui封装查询组件

    下面是一步步基于element-ui封装查询组件的完整攻略。 步骤一:安装element-ui 首先,我们需要在项目中安装并引入element-ui,可以通过以下命令进行安装: npm install element-ui -S 引入element-ui: import Vue from ‘vue’ import ElementUI from ‘elemen…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部