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

下面我就为大家详细介绍一下关于 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日

相关文章

  • JavaScript全解析——this指向

    本系列内容为JS全解析,为千锋教育资深前端老师独家创作 致力于为大家讲解清晰JavaScript相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~ this指向(掌握) this 是一个关键字,是一个使用在作用域内的关键字 作用域分为全局作用域和局部作用域(私有作用域或者函数作用域) 全局作用域 全局作用域中this指…

    JavaScript 2023年5月11日
    00
  • Ajax请求WebService跨域问题的解决方案

    跨域即浏览器从一个域名的网页,向另一个域名的服务器请求数据,因为同源策略的限制,Ajax请求WebService跨域通常会出现问题。那么如何解决这个问题呢?下面是一种常见的解决方案: 方案一:Jsonp跨域 JSONP(JSON with Padding)是 JSON 的一种“使用模式”,可用于解决跨域问题。JSONP 的原理是通过 标签的 src 属性不受…

    JavaScript 2023年6月11日
    00
  • JavaScript中的getTime()方法使用详解

    JavaScript中的getTime()方法使用详解 简介 getTime()是JavaScript的一个内置函数,用来获取当前时间的毫秒数。它返回1970年1月1日0时0分0秒到当前时间的毫秒数。这个时间被称为“Unix时间戳”。 语法 当我们调用Date对象的getTime()方法时,不需要传递任何参数: var now = new Date(); v…

    JavaScript 2023年5月27日
    00
  • javascript调试之DOM断点调试法使用技巧分享

    JavaScript调试之DOM断点调试法使用技巧分享 什么是DOM断点调试法 DOM断点调试法是一种网页调试方法,主要利用断点调试DOM元素的方式,来定位和解决JavaScript的问题。当页面效果不符合预期,或者页面崩溃、卡死等情况出现时,可以使用DOM断点调试法,找到问题所在,快速解决问题。 如何使用DOM断点调试法 步骤一:定位问题 首先,根据报错信…

    JavaScript 2023年6月10日
    00
  • 用javascript实现倒计时效果

    下面给出实现倒计时效果的完整攻略。 标题 用JavaScript实现倒计时效果 步骤 1. 获取倒计时目标时间 要实现倒计时效果,首先需要获取倒计时的目标时间。这里我们可以利用JavaScript内置的Date对象来获取目标时间。 const targetTime = new Date(‘2021-10-15T18:00:00Z’).getTime(); /…

    JavaScript 2023年5月27日
    00
  • input 日期选择功能的javascript代码

    下面就为你详细讲解“input日期选择功能的javascript代码”的完整攻略。 为 input 元素添加日期选择 使用 input 元素时,我们经常需要选择日期。在 HTML5 中,我们可以使用 input 元素的 type 属性设置为 date 来显示日期选择控件。例如: <input type="date" id=&quot…

    JavaScript 2023年5月27日
    00
  • JavaScript小技巧整理篇(非常全)

    JavaScript小技巧整理篇(非常全) 本文整理了一些需要注意的细节和小技巧,以帮助读者更好地理解和使用JavaScript。 一、变量声明 在JavaScript中,变量声明有三种方式:var、let和const。 1.1 let和const let和const是在ES6中引入的新的变量声明方式。let会在当前代码块作用域内声明一个变量,而const会…

    JavaScript 2023年5月17日
    00
  • js 得到文件后缀(通过正则实现)

    要得到一个文件的后缀,可以通过以下步骤来实现: 步骤 1:获取完整文件名 首先,我们需要获取文件的完整文件名,可以通过以下方式来获取: let fileName = ‘example.txt’; 步骤 2:通过正则表达式获取文件后缀 我们可以使用正则表达式来获取文件的后缀,正则表达式的语法为: /\.[^.]+$/g 该正则表达式的含义为: /\. :匹配以…

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