VUE2常见问题以及解决方案汇总(不断更新中)

news/2024/10/6 4:06:53

vue子组件传递数据给父组件

子组件可以使用 $emit 向父组件传递数据。父组件监听这个事件,并在事件触发时接收数据。

上代码

子组件 (Child.vue)

<template><button @click="sendDataToParent">Send Data to Parent</button>
</template><script>
export default {methods: {sendDataToParent() {const data = { message: '我是子组件发送的数据哦' };this.$emit('data-from-child', data);}}
}
</script>

父组件 (Parent.vue):

<template><div><child @data-from-child="receiveDataFromChild"></child><p>Data received from child: {{ dataFromChild }}</p></div>
</template><script>
import Child from './Child.vue';export default {components: {Child},data() {return {dataFromChild: null};},methods: {receiveDataFromChild(payload) {this.dataFromChild = payload.message;}}
}
</script>

vue + elementui 使用dialog弹出框作为子组件,首次点击弹框可以显示,第二次点击弹框后赋值无法打开弹框

原因:子组件可以使用 $emit 向父组件传递数据,更新父组件里的弹框控制变量值。

上代码

父组件

<template><div><el-button @click="openDialog">Reset</el-button><TestDialog :show-dialog="showDialog" @changeDialog="changeDialog"></TestDialog></div>
</template><script lang="ts">
import { Component, Vue, Watch } from "vue-property-decorator";
export default class Parent extends Vue {showDialog = falseopenDialog() {this.showDialog = true}changeDialog(v) { // 关键代码this.showDialog = v}
}
</script>

子组件 (Child.vue)

<template><div><el-dialogwidth="80%":visible.sync="showDialog"title="上传图片":show-close="true"close-on-click-modal="false"append-to-body@close="handleCancel"><div>TestDialog </div></el-dialog></div>
</template><script lang="ts">
import { Component, Vue, Watch } from "vue-property-decorator";
@Component({props: {showDialog: {type: Boolean,default: false,},},components: {},
})
export default class Parent extends Vue {showDialog = falsehandleCancel() {this.$emit('changeDialog', false) // 关键代码}
}
</script>

多种方案教你解决:vue + elementui 使用dialog弹出框,el-dialog双滚动条、页面抖动问题

解决当el-dialog 弹窗后页面内容很多,导致页面有两个滚动条,el-dialog和body都有滚动条,如何解决弹框后,去掉或者隐藏外面body的滚动条

上代码

方案1:添加 :lock-scroll="false"

<el-dialogtitle="":visible.sync="showDialog":close-on-press-escape="false":show-close="false":lock-scroll="false" // 关键代码:close-on-click-modal="false"class="create-new-request-dialog"width="70%">

方案2:修改样式

原理在于把弹框设置最大高度,不会超出屏幕,然后把内部的元素设置滚动就可以了

/* 设置弹框最大高 */
:deep(.el-dialog) {max-height: 90vh !important;....此处省略一些设置滚动的代码
}

vue + elementui 使用 el-input 无法输入的问题,打字不生效的问题(使用数组或者对象循环动态绑定)

解决方案

绑定@input事件,输入后实时更新视图

<el-input v-model="myObj.input1" @input="updateView($event)" />
<el-input v-model="myObj.input2" @input="updateView($event)" />//methods
updateView(e) {this.$forceUpdate()
}   

代码案例

                <div v-for="(item, index) in reasonList" :key="item.keyName"><el-inputv-model="item.reason"placeholder="Please state the reason"@input="updateView($event)"></el-input></div>updateView() {this.$forceUpdate();}

vue + elementui 使用 el-checkbox-group ,动态循环生成el-checkbox后数据更新但是页面不更新,无法取消勾选,点击无效问题

解决方案

动态设置值,强制更新视图

<el-checkbox-group v-model="optionsSelected"><divv-for="(item, index) in optionList":key="item.keyName"><el-checkboxv-model="item.checked":label="item.keyName"@change="(val) => {handleChange(val, item, 'checked');}"><p v-html="item.label"></p></el-checkbox></div></el-checkbox-group>handleControlPanelChange(val, item, key) {this.$set(this.optionList[item.index], key, val); # 重点代码this.$forceUpdate(); # 重点代码}

vue2 部分组件赋值后无效,有的时候有效有的时候无效

解决方案1

初始化的时候整个对象设置为null,再重新赋值整个对象就会有更新了

解决方案2

vue el-checkbox 数组赋值后值变了,但是页面不更新状态,状态和值对不上

解决方案1

this.$forceUpdate();

解决方案2

this.optionList.splice(); // 更新视图

解决方案3

检查:如果你用的是el-checkbox-group,除了赋值的时候更改optionList,也要检查赋值一下optionSelected,两个数据不一致会导致异常哦

<el-checkbox-group v-model="optionSelected">
<divv-for="(item,index) in optionList":key="index"><el-checkboxv-model="item.checked":label="item.keyName"@change="(val) => {handleChange(val, item, 'checked');}"><p v-html="item.label"></p></el-checkbox>

亲测管用:element中el-upload上传文件去掉文件列表,上传失败文件如何去掉-去除文件列表失败文件

let uid = fileParams.file.uid // 关键作用代码,去除文件列表失败文件
let idx = this.$refs.uploadFileComponent.uploadFiles.findIndex(item => item.uid === uid) // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)this.$refs.uploadFileComponent.uploadFiles.splice(idx, 1) // 关键作用代码,去除文件列表失败文件

待继续补充

结语

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68214.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

1分钟搞懂K8S中的NodeSelector

@目录NodeSelector是什么?为什么使用NodeSelector?怎么用NodeSelector?POD配置示例yaml配置示例如何知道K8S上面有哪些节点,每个节点都有什么信息呢?1. 使用kubectl命令行工具查看所有节点及其标签2. 使用kubectl命令行工具查看特定节点的标签代码举例常见的NodeSelector节…

谷歌浏览器调试技巧

谷歌浏览器断点调试# “资源(Sources)”面板# 进入浏览器,点击F12,进入调试面板,点击source 切换按钮 会打开文件列表的选项卡。资源(Sources)面板包含三个部分:文件导航(File Navigator) 区域列出了 HTML、JavaScript、CSS 和包括图片在内的其他依附于此页面的文件。…

两种方案手把手教你多种服务器使用tinyproxy搭建http代理

@目录Tinyproxy是什么?特点功能安装方案一:Docker安装安装tinyproxy镜像,启动容器将内部8888端口至外部,ANY代表允许所有ip访问代理获得代理地址安装方案二:系统包管理器Tinyproxy 可以通过包管理器安装。以下是一些常见的 Linux 和 mac发行版的安装命令:MAC电脑Linux配置…

Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)

@目录Docker的数据持久化是什么?1.数据卷(Data Volumes)使用Docker 创建数据卷创建数据卷创建一个容器,将数据卷挂载到容器中的 /data 目录。进入容器,查看数据卷内容停止并重新启动容器,数据卷中的数据仍然存在再次进入容器,检查文件是否存在使用 Docker Compose 创建数…

基于simulink的风轮机发电系统建模与仿真

1.课题概述使用simulink实现风轮机发电系统建模与仿真,包括风速模型(基本风+阵风+阶跃风+随机风组成),风力机模型,飞轮储能模块等。2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a风速模块:风力机模块 整体模型4.系统原理简介 4.1 风速模型风速模型在风力发电和其他…

2024-10-06 闲话

2024-10-06 闲话坐在电脑前 1 小时也什么都写不出来。 比如我现在住的地方(在一个房子里面)旁边有一个大冰块,因为这个大冰块在吸热所以我在家里感受到了无尽的寒冷。 于是我读了几本古圣先贤的书,合成了能烧来取暖的蜂窝煤。我又拿了根钻头把蜂窝煤点着了,尾气全部排到房…

报错集

报错集弹性云服务器ECS + 自动分配IP地址 + 配置安全组规则 + 配置并创建桶1.另外一个冲突的操作当前正作用在这个资源上,请等待一段时间后重试。 A conflicting conditional operation is currently in progress against this resource.Please try again 解决方案:桶的名称重…

云锵投资 2024 年 9 月简报

季报摘要行情:双重底结束,牛市启动;未来:长线看多; 期权策略:研发成功。节后正式上线,是未来的主要现金流策略; 微盘策略:非主流策略,三月连涨,未来长持; 本季度量化基金策略业绩:15.89%,优,全国排名:1858/11684;平均 Beta:1.00; 本季度量化股票策略业绩:3…