好家伙,搬砖

 

今天在做组件迁移(从一个旧平台迁移到一个新平台)的时候,发现了一些小小的问题:

1.错误描述:

在穿梭框组件中,使用"节点配置"方法添加数据的时候,左测数据选择框直接消失了

这里我们猜测一下,大概是数据处理出了问题

此处,我们使用"数据绑定"绑定数据方法:

 

 定义数据:

 

绑定数据

 

2.错误分析

此时我们去看看"节点配置"方法和"数据绑定"绑定的数据长什么样子

后面对比两组数据

options                             variablee

                

到这里大概能看出问题来了,显然左边的数据多包了一层"model"

大概写个map()就能搞定

3.源码定位

那么,我们去翻该组件的源码:

哇塞,公司的人能敲出这么漂亮的组件,真是太厉害了

 .....

emmmm...

 

Element-UI,不愧是你啊

好了,回到正题

4.修改错误

此处我们直接定位到数据相关的核心部分

组件绑值

:data="(dataType == 'def' ? optionConfig : options)"

("def"对应"节点配置","cus"对应"数据绑定")

数据props:

props: {
optionConfig: {
type: [String, Object, Array],
default: () => {
return []
}
},
options: {
type: [Array, String, Object],
default: () => {
return []
}
},
}

也就是说,此处options中的数据没有经过处理就直接拿去使用了,那么我们只需要加上处理就好

我们使用计算属性,对数据进行一个预处理

computed: {
optionsnext: {
get() {
let temp = [];
temp = this.options?.map((item) => {
return {
...item,
disabled: item.model["disabled"],
key: item.model["key"],
label: item.model["label"],
};
}) ?? []
return temp;
}
},
}

随后再把它绑上

:data="(dataType == 'def' ? optionConfig : optionsnext)"

看看效果,

 搞定!

5.代码解释

computed: {
optionsnext: {
get() {
let temp = [];
temp = this.options?.map((item) => {
return {
...item,
disabled: item.model["disabled"],
key: item.model["key"],
label: item.model["label"],
};
}) ?? []
return temp;
}
},
}

5.1.问:此处"?"和"??"的作用分别是什么,为什么要这样写?

答:

?.(可选链操作符)用于在访问属性或调用方法之前,先判断对象是否为null或undefined。

如果对象为null或undefined,就会短路返回undefined,而不会继续执行后续的属性访问或方法调用。

这样可以避免在空值上尝试访问属性或调用方法时出现错误,简化了代码的写法和错误处理。

??(空值合并操作符)用于在变量为空(null或undefined)时,提供一个默认值。

当左侧的值为null或undefined时,空值合并操作符会返回右侧的默认值。如果左侧的值不为空,则返回左侧的值。

 这样的写法避免了抛出异常。

5.2.问:...item的作用?

...item 的作用是使用对象展开运算符将 item 对象的属性和值依次展开到新的对象中。

这样可以创建一个新的对象,其中包含了原始对象的所有属性及其对应的值。

...item 是一种简洁的写法,能够快速复制对象的属性和属性值。

它在使用对象字面量创建新的对象时很常用,可以方便地克隆或创建新的对象,而不改变原始对象的引用。

大二暑期实习记录(一):处理组件绑定数据错误(数组解构,map()方法)的更多相关文章

  1. Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定

    Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...

  2. vuex2.0.0爬坑记录 -- mutations的第一个参数state不能解构

    今天在学习vuex的过程中,遇到了一个很困扰人的问题,最终利用vuex的状态快照工具logger解决了问题. 问题是这样的,我在子组件中使用了mapState()函数来将状态映射至子组件中,使子组件能 ...

  3. IOS组件绑定无效错误

    报错的原因:界面按钮事件没有绑定到源代码或者相关的代码被注释了.比如你的button组件以及绑定到IBOutlet,但是viewcontrol.m上没有相关的代码,就会出现异常.

  4. Vue组件之间数据交互与通信

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 一.父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传 ...

  5. ES6入门之变量的解构赋值(二)

    前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...

  6. ES6 变量与解构(二)

    一.变量的声明与使用 [测试示例需要在node环境中测试,浏览器环境下并不完全兼容ES6代码]ES6中可以使用 {} 来包含任意一段代码,被 {} 包裹的内容称为一个代码块(局部作用域) let关键字 ...

  7. vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)

    看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...

  8. 化学专业大二转战Android开发,终于拥有了鹅厂暑期实习offer

    我是双非学校,应用化学专业,一年前我大二,现在我大三.一年前我两手空空,现在我拥有了鹅厂暑期实习的offer. 虽然结果是好的,但我春招实习的道路远没有这么简单和辉煌,它是无比坎坷的:每个人应该量力而 ...

  9. 杂记:腾讯暑期实习 Web 后端开发面试经历

    今天面试(一面)腾讯暑期实习 Web 后端开发,一言难尽. 第一部分,常规的自我介绍. 介绍完,面试官问我对人工智能有什么理解?深度学习和机器学习的区别?对调参有什么见解?语音识别中怎样运用了机器学习 ...

  10. 我的阿里、腾讯暑期实习Offer经历

    三四月份对我拿来说是个忙碌的两个月,实验室项目到了关键的时刻,自己又需要抽身去找暑期实习,总之过得很快.值得欣慰的是幸运的拿到了阿里和腾讯的暑期实习offer,也算是对三四月份的忙碌一些回报吧.阿里的 ...

随机推荐

  1. Jmeter-测试报告模板分享

    1.jmeter-results-detail-report_21 <?xml version="1.0"?> <!-- ~ Licensed to the Ap ...

  2. JVM面试和学习中需要注意的部分

    内存结构 1.方法区用来存储类加载的数据,例如类的名称,方法入口 2.JVM虚拟机栈用于存储线程,包括局部变量和方法参数 3.堆内存用来存储对象 4.方法区的规范实现:永久代和元空间 5.方法区 JV ...

  3. selenium文件上传和弹框处理

    文件上传 input 标签可以直接使用send_keys(文件地址)上传文件 用法: el = driver.find_element_by_id('上传按钮id') el.send_keys(&qu ...

  4. 2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到

    2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边. 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到 ...

  5. shader编程基础:画线

    以sin曲线为例,任何函数曲线画法类似. 画线原理虽然十分简单,却是复杂图形曲线绘制的基础. uv和smoothstep等函数不清楚请参考跳转链接: shader编程基础:画圆 #define T . ...

  6. 2023-05-18:有 n 名工人。 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。 现在我们想雇佣

    2023-05-18:有 n 名工人. 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] . 现在我们想雇佣 ...

  7. 从 pheatmap 无缝迁移至 ComplexHeatmap

    pheatmap 是一个非常受欢迎的绘制热图的 R 包.ComplexHeatmap 包即是受之启发而来.你可以发现Heatmap()函数中很多参数都与pheatmap()相同.在 pheatmap  ...

  8. UpSetR 关联的 venneuler 包安装笔记

    本文章已经设置了最低额度的付费阅读,如果您觉得文章对您有用,且手头宽裕,欢迎请作者喝杯热茶.本文章付费部分内容并不影响您对文章的阅读和理解,只是作者对付费阅读的一次尝试,感谢. 背景 R 语言中的 v ...

  9. opencv图像显示问题

    opencv 的图像类型都是numpy array.dtype = uint8. 如果是默认的python的int类型的numpy array,即使每个整数都在范围0-255, 图像也不会显示,必须转 ...

  10. uniapp主题切换功能的方式终结篇(全平台兼容)

    前面我已经给大家介绍了两种主题切换的方式,每种方式各有自己的优势与缺点,例如"scss变量+vuex"方式兼容好但不好维护与扩展,"scss变量+require" ...