在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?

本文主要是介绍在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Vue 3中,el-select 组件是来自 Element Plus UI 库的一部分。
如果你想要设置默认选中的选项,你可以使用 v-model 来绑定选中的值。如果你想要在某个时刻让某个选项显示为已选中,可以设置对应的值到 v-model 绑定的数据。

<template><el-select v-model="selectedValue" placeholder="请选择"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option></el-select>
</template><script>
import { ref } from 'vue';
export default {setup() {const selectedValue = ref(''); // 绑定的选中值const options = ref([ // 下拉选项数据{ label: '选项1', value: 'option1' },{ label: '选项2', value: 'option2' },{ label: '选项3', value: 'option3' }]);// 默认选中第一个选项selectedValue.value = options.value[0].value;}
};
</script>

实际开发场景使用中,有时候循环的options数据结构比较复杂 嵌套层次也比较多时 ,
如果不注意value的值绑定的是个对象类型,会发现每个选项都是选中效果,这显然是不对的

当el-option的value值是对象类型时,你需要确保v-model绑定的值也是相同类型的对象,并且它们可以通过引用或者深度比较(例如,通过比较对象的属性和值)来匹配。在Vue中,对于对象类型的比较,Vue会使用===操作符,这意味着两个对象必须是同一个引用才会被认为是相等的。

如果你的v-model绑定的值是一个对象,并且你想要在el-option列表中选择一个与这个对象相匹配的选项,你需要确保列表中的每el-option的value都是对应对象的引用,或者你可以提供一个方法来比较两个对象是否相等(这通常更复杂且不推荐)。

不过,更常见的做法是使用对象的某个唯一属性(如ID)作为el-option的value,而不是整个对象
这样,v-model绑定的值就会是这个唯一属性,而不是整个对象。这样做更简单,也更符合Vue的响应式系统。
下面是一个使用对象的ID作为value的例子:
使用 :value=“item.value.id” 而不是:value=“item.value”

 const options = ref([ // 下拉选项数据,每个选项有一个唯一的id和一个label{label: '选项1' ,value:{id:1}},{ label: '选项2' ,value:{id:2}},{ label: '选项3' ,value:{id:3}},]);<el-select v-model="selectedId" placeholder="请选择"><el-optionv-for="item in options":key="item.id":label="item.label":value="item.value.id"></el-option></el-select>

当你value的值绑定的是个对象类型,发现每个选项都是选中效果
同时F12 时,你发现每个el-option都有aria-selected=“true”,这可能是由于value和v-model值得类型不一致且不等,此处再次建议 value的值近量不要绑定一个对象类型的值,

aria-selected=“true” 是一个ARIA (Accessible Rich Internet Applications) 属性,它用于表示当前选中的选项。并且该选项会添加类名‘selected’>

在ElementPlus或其他类似的UI库中,每个el-option标签上不应该在初始状态下都拥有aria-selected="true"属性,因为这意味着每个选项都被认为是选中状态,这显然是不正确的。一个下拉列表或选择器el-select中应该只有一个选项被选中,并且只有这个选项应该拥有aria-selected="true"属性。

如果以上都没问题再查看其他原因 如下:
1.Bug或错误实现:可能是Element Plus库的一个bug,或者是你使用的某个版本中的错误实现。你可以尝试更新到最新版本,或者查看Element Plus的issue追踪器,看看是否有人报告了类似的问题。

2.自定义代码或样式:可能你的代码或样式中不小心给每个都添加了aria-selected=“true”。检查你的模板、计算属性、方法或全局样式,确保没有错误地设置这个属性。

3.第三方插件或扩展:如果你使用了某些浏览器插件或开发者工具扩展,它们可能会干扰DOM并错误地添加属性。尝试在无痕模式或禁用插件的情况下查看页面,看看问题是否仍然存在。

这篇关于在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060096

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

嵌入式软件常见的笔试题(c)

找工作的事情告一段落,现在把一些公司常见的笔试题型整理一下,本人主要是找嵌入式软件方面的工作,笔试的也主要是C语言、数据结构,大体上都比较基础,但是得早作准备,才会占得先机。   1:整型数求反 2:字符串求反,字符串加密,越界问题 3:字符串逆序,两端对调;字符串逆序,指针法 4:递归求n! 5:不用库函数,比较两个字符串的大小 6:求0-3000中含有9和2的全部数之和 7

vue, 左右布局宽,可拖动改变

1:建立一个draggableMixin.js  混入的方式使用 2:代码如下draggableMixin.js  export default {data() {return {leftWidth: 330,isDragging: false,startX: 0,startWidth: 0,};},methods: {startDragging(e) {this.isDragging = tr

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页:

vue+el国际化-东抄西鉴组合拳

vue-i18n 国际化参考 https://blog.csdn.net/zuorishu/article/details/81708585 说得比较详细。 另外做点补充,比如这里cn下的可以以项目模块加公共模块来细分。 import zhLocale from 'element-ui/lib/locale/lang/zh-CN' //引入element语言包const cn = {mess

以canvas方式绘制粒子背景效果,感觉还可以

这个是看到项目中别人写好的,感觉这种写法效果还可以,就存留记录下 就是这种的背景效果。如果想改背景颜色可以通过canvas.js文件中的fillStyle值改。 附上demo下载地址。 https://download.csdn.net/download/u012138137/11249872

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在