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

server/2024/10/21 10:02:30/

解决vue项目中 el-table 的 @row-click 事件与行内点击事件冲突,点击事件不生效(表格行点击事件和行内元素点击事件冲突)需要阻止事件冒泡

问题描述

1.点击列的编辑按钮,会触发按钮本身事件,同时会触发行点击事件
2.点击列的元素,会触发本身事件,同时会触发行点击事件

需求描述

点击列的元素,想要传参的同时,点击行内按钮不触发行点击事件,需要阻止事件冒泡

解决方案

需要分情况处理,如果按钮是以el开头的标签,我们可以为点击事件加.native.stop,如下:

<el-button type="text" size="medium" @click.native.stop="editControl(scope.row)">编辑</el-button>

如果按钮是以普通HTML标签,我们可以为点击事件加.stop,如下:

<i @click.stop="editControl(scope.row)">编辑</i>

理解vue @click.native .stop .self

事件修饰符概述

Vue.js 提供了一系列事件修饰符,这些修饰符可以帮助你更精细地控制事件的处理方式。以下是常用的几个修饰符:

  • .stop:阻止事件冒泡。
  • .prevent:阻止默认行为。
  • .capture:使用捕获模式添加事件监听器。
  • .self:只有当事件发生在元素本身而不是子元素时才触发。
  • .native:直接绑定原生 DOM 事件,而不是 Vue 的合成事件。

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>

elementui_dialog_75">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>

elementui_dialogeldialog_139">多种方案教你解决: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;....此处省略一些设置滚动的代码
}

elementui__elinput__165">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();}

elementui__elcheckboxgroup_elcheckbox_194">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.ppmy.cn/server/129686.html

相关文章

世昌股份与吉利亲密关系:资产负债率远高同行,应收账款周转率偏弱

《港湾商业观察》杨丹妮 9月23日&#xff0c;河北世昌汽车部件股份有限公司&#xff08;以下简称“世昌股份”&#xff09;回复了第一轮审核问询函&#xff0c;公司于今年六月递表北交所&#xff0c;保荐机构为东北证券。 近几年新能源汽车如日中天&#xff0c;世昌股份也因此…

R语言绘制折线图

折线图是实用的数据可视化工具&#xff0c;通过连接数据点的线段展示数据随时间或变量的变化趋势。在经济、科学、销售及天气预报等领域广泛应用&#xff0c;为决策和分析提供依据。它能清晰呈现经济数据动态、助力科学研究、反映企业销售情况、预告天气变化&#xff0c;以简洁…

Spring Boot洗衣店订单管理:提升客户满意度

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

模仿postman自研的HTTP Client Chrome插件,可绕过浏览器同源政策发起跨域请求

文章目录 1、项目背景2、准备好服务端接口3、chrome扩展开发4、扩展程序演示1、项目背景 在企业开发过程中,有时候需要手动调用线上服务的接口,我们的服务是通过cookie来保存登录态的,且接口做了身份验证,此时有两种情况: 接口是GET类型,则可以直接在浏览器地址栏输入接…

知识见闻 - 什么是SOP

什么是SOP&#xff08;标准作业程序&#xff09; SOP 全称为Standard Operating Procedure&#xff0c;中文常翻译为标准作业程序或标准操作程序&#xff0c;将某一事件的标准操作步骤和要求以统一的格式描述出来&#xff0c;用来指导和规范日常的工作。SOP是指在有限时间与资源…

VmWare中安装CenterOs(内网服务器)

VmWare中安装CenterOs(内网服务器) 文章目录 VmWare中安装CenterOs(内网服务器)[toc] 一 、CentOS 7的下载与安装1、下载2、安装&#xff08;1&#xff09;前期准备&#xff08;2&#xff09;正式安装 开始等待&#xff01;&#xff01;&#xff01; 二、软件仓库更换1、root用…

2000-2023年上市公司市场竞争程度(行业赫芬达尔指数、勒纳指数)

2000-2023年上市公司市场竞争程度&#xff08;行业赫芬达尔指数、勒纳指数&#xff09; 1、时间&#xff1a;2000-2023年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、省份代码、城市代码、区县代…

如何在 SQL 中更新表中的记录?

当你需要修改数据库中已存在的数据时&#xff0c;UPDATE 语句是你的首选工具。 这允许你更改表中一条或多条记录的特定字段值。 下面我将详细介绍如何使用 UPDATE 语句&#xff0c;并提供一些开发建议和注意事项。 基础用法 假设我们有一个名为 employees 的表&#xff0c;…