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

news2024/10/6 5:54:02

解决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>

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 = false
  openDialog() {
    this.showDialog = true
  }
  changeDialog(v) { // 关键代码
    this.showDialog = v
  }
}
</script>


子组件 (Child.vue)
<template>
  <div>
  <el-dialog
      width="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 = false
  handleCancel() {
    this.$emit('changeDialog', false) // 关键代码
  }
}
</script>

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

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

上代码

方案1:添加 :lock-scroll=“false”
<el-dialog
      title=""
      :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-input
                    v-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">
            <div
              v-for="(item, index) in optionList"
              :key="item.keyName"
            >
              <el-checkbox
                v-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">
<div
              v-for="(item,index) in optionList"
              :key="index"
            >
              <el-checkbox
                v-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.coloradmin.cn/o/2191249.html

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

相关文章

自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)

文章目录 一、 前言二、新建工程&#xff08;以51单片机流水灯为例&#xff09;2.1 打开软件2.2 建立新工程2.3 创建原理图2.4 不创建PCB布版设计2.5 创建成功2.6 添加元器件2.7 原理图放置完成2.8 编写程序&#xff0c;进行仿真2.9 仿真 三、常用元器件图示和功能介绍3.1 元件…

春秋云镜靶场之CVE-2022-28525

1.环境搭建 我们开启环境 可以看到题目提示我们是文件上传漏洞&#xff0c;那么我们就进行测试 2.开启环境 我们开启环境&#xff0c;可以看到是一个登录页面&#xff0c;登录页面:一种是弱口令&#xff0c;一种是自己进行注册&#xff0c;一种是SQL注入&#xff0c;一种是在…

【rCore OS 开源操作系统】Rust 异常处理

【rCore OS 开源操作系统】Rust 异常处理 前言 虽然人还在旅游ing&#xff0c;但是学习不能停止&#xff0c;所以还是写点博客记录下。 对于 Rust 的异常处理&#xff0c;我的感受是&#xff1a;晦涩难懂&#xff0c;繁琐难记。 但是没办法&#xff0c;正如一位故人所说的&…

算法 | 位运算(哈希思想)

位运算 &与两个位都为1时&#xff0c;结果才为1&#xff08;有0为0&#xff09;|或两个位都为0时&#xff0c;结果才为0&#xff08;有1为1&#xff09;^异或两个位相同为0&#xff0c;相异为1~取反0变1&#xff0c;1变0<<左移各二进位全部左移若干位&#xff0c;高…

【FPGA开发】Modelsim如何给信号分组

前面已经发布过了一篇关于 Modelsim 的入门使用教程&#xff0c;针对的基本是只有一个源文件加一个仿真tb文件的情况&#xff0c;而实际的工程应用中&#xff0c;往往是顶层加多个底层的源文件结构&#xff0c;如果不对信号进行一定的分组&#xff0c;就会显得杂乱不堪&#xf…

LSM6DSV16X基于MLC智能笔动作识别(4)----中断获取智能笔状态

LSM6DSV16X基于MLC智能笔动作识别.4--中断获取智能笔状态 概述视频教学样品申请源码下载硬件准备开启INT中断参考驱动程序配置中断主程序演示 概述 LSM6DSV16X 支持通过中断&#xff08;INT&#xff09;输出 MLC&#xff08;机器学习核&#xff09;识别的动作。具体来说&#…

YOLOv8改进线性注意力模块 ICCV2023 FLatten Transformer

1,原理部分 论文地址:2308.00442 (arxiv.org) 在将 Transformer 模型应用于视觉任务时,自我注意的二次计算复杂性一直是一个持续的挑战。另一方面,线性注意力通过精心设计的映射函数近似 Softmax 操作,通过其线性复杂性提供了一种更有效的替代方案。然而,当前的线性注意…

手机sd卡数据被清空怎么恢复原状?高效、可行的恢复策略

在数字化时代&#xff0c;手机SD卡作为我们存储重要数据的“数字仓库”&#xff0c;其安全性与稳定性直接关系到我们日常生活的便捷与信息安全。然而&#xff0c;不慎操作或系统故障导致的SD卡数据清空&#xff0c;常常让人措手不及&#xff0c;焦虑万分。面对这一挑战&#xf…

@antv/x6 导出图片下载,或者导出图片为base64由后端去处理。

1、导出为文件的格式&#xff0c;比如 PNG graph.exportPNG(function (dataURL) {console.log(dataURL);let img document.getElementById(img) as HTMLImageElement;img.src dataURL;},{backgroundColor: #fff,padding: [20, 20, 20, 20],quality: 1,width: graph.options.w…

TIM输入捕获及其应用场景

一&#xff0c;TIM输入捕获介绍&#xff08;IC&#xff08;Input Capture&#xff09;输入捕获&#xff09; 定义&#xff1a;输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;如上升沿或下降沿&#xff09;时&#xff0c;当前定时器的计数值&#xff0…

python画图|步进图基本教程

有些时候&#xff0c;画顺滑的图形不能满足表达需求&#xff0c;可能需要使用步进图形来辅助表达。 【1】官网教程 首先我们乖乖进入官网&#xff0c;使用下述链接直达&#xff1a; Step Demo — Matplotlib 3.9.2 documentation 这里有两个图形作为示例&#xff0c;为高效…

第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例

JPA教程 - JPA查询OrderBy两个属性示例 以下代码显示如何按两个属性排序&#xff0c;一个升序&#xff0c;另一个降序。 List l em.createQuery("SELECT e FROM Professor e " "JOIN e.department d ORDER BY d.name, e.name DESC").getResultList();例子…

传感器模块编程实践(二)W5500 SPI转以太网模块简介及驱动源码

文章目录 一.概要二.W5500芯片介绍W5500通讯协议介绍 三.W5500模块介绍四.W5500模块原理图五.W5500以太网模通讯实验六.CubeMX工程源代码下载七.小结 一.概要 我们介绍过单片机的以太网系统一般是由&#xff1a;单片机MACPHYRJ45。有些单片机比如STM32F407VET6芯片内部自带MAC…

如何在Allegro中创建实现可以走线但不能铺铜的区域

第一步&#xff0c;点击Setup-Areas-Shape Keepout&#xff0c;在需要禁止铺铜的区域画好禁示区域&#xff1b; 第二步&#xff0c;画好后&#xff0c;此区域内的动态铺铜会自动避让&#xff0c;而走线不会报错。 参考&#xff1a; Cadence allegro软件如何设置区域为禁止铺铜…

十、kotlin的协程

协程 基本概念定义组成挂起和恢复结构化并发协程构建器作用域构建器挂起函数阻塞与非阻塞runBlocking全局协程像守护线程 Job的生命周期 常用函数延时和等待启动和取消启动取消 暂停 协程启动调度器启动方式启动模式线程上下文继承的定义继承的公式 协程取消与超时取消挂起点取…

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…

回归树练习,泰坦尼克号幸存者的预测

回归树练习&#xff0c;泰坦尼克号幸存者的预测 数据集下载地址 https://download.csdn.net/download/AnalogElectronic/89846327 我们来看看train.csv文件&#xff0c;它包含了891个样本&#xff0c;每个样本代表一个乘客。这些样本的数据包括乘客的年龄&#xff08;Age&…

Allegro 中如何关闭DRC检查

setup--constraints--modes 在这里就能选择关闭 Line to Route Keepout Spacing 的DRC检查了

懒洋洋浅谈--机器学习框架

机器学习&#xff0c;这个词汇听起来就像是科幻小说里那些能够自我进化的机器人一样神秘而强大。但别担心&#xff0c;让我用一种更接地气的方式来揭开它的神秘面纱。 关于机器学习&#xff0c;有一个非常有意思的介绍误闯机器学习&#xff08;第一关-概念和流程&#xff09;-C…

Redis:set类型

Redis&#xff1a;set类型 set命令SADDSMEMBERSSISMEMBERSCARDSPOPSRANDMEMBERSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码intsethashtable 当把一些关联的数据放到一起&#xff0c;就构成一个集合。在Redis中&#xff0c;使用set类型维护…