首页 > 其他分享 >VUE2常见问题以及解决方案汇总,vue+element ui 问题以及解决方案汇总(不断更新中)

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

时间:2024-10-06 09:05:05浏览次数:8  
标签:el 常见问题 解决方案 汇总 点击 vue 事件 组件

解决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) // 关键作用代码,去除文件列表失败文件

待继续补充

结语

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

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

在这里插入图片描述

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

标签:el,常见问题,解决方案,汇总,点击,vue,事件,组件
From: https://www.cnblogs.com/sugartang/p/18247386

相关文章

  • 9月30日小测知识汇总
    在今天的小测试中需要完成GUI显示30道四则运算算术题,并且加上计时功能,在测试结束后整理所学知识时有以下几点自己不掌握的知识点:1:思维流程:1初始化全局变量数据存储结构,开始时间和结束时间,运算符,正确率计数器,题目数量;2构造方法,JFrame窗口初始化以及Button按钮监视器和执行方法;......
  • PHP报错getimagesize(): SSL operation failed with code 1问题解决方案
    这个PHP错误通常发生在尝试通过HTTPS协议获取图像时,由于缺少或过期的CA证书导致SSL连接验证失败。以下是详细的解决方案:解决方案一:更新CA证书下载最新的CA证书访问 curl官方提供的CA证书 页面下载 cacert.pem 文件。上传证书文件将下载的 cacert.......
  • PbootCms上传图片变模糊、上传图片尺寸受限的解决方案
    在使用PbootCMS的过程中,如果上传的图片被压缩变得模糊,通常是因为上传的图片尺寸过大。PbootCMS默认的上传图片限制宽度为1920像素,缩略图的限制大小为1000×1000像素。可以通过调整这些参数来解决这个问题。解决方案打开 config.php 文件调整 max_width 和 max_heigh......
  • PbootCms内页打不开的常见情况汇总
    当使用PbootCMS时遇到内页无法正常访问的情况,比如点击任何链接都跳转到首页或内页访问报错,通常是因为伪静态配置不正确导致的。以下是一些常见的解决方案:解决方案1.关闭伪静态,使用兼容模式如果你暂时不想处理伪静态配置问题,可以先关闭伪静态,使用兼容模式。这样可以快速解决问......
  • Centos7 停止维护之后 升级gcc||找不到devtoolset-8-gcc* 问题解决方案
    为了去小米澎湃互联组,感觉必须得拿下linux网络编程,今天第一步这个centos就给我拉了坨大的问题实质SCL源没换,相信你也在别的教程上看到要安装centos-release-scl吧?有坑!安装完成后在/etc/yum.repos.d目录下会出现CentOS-SCLo-scl.repo和CentOS-SCLo-scl-rh.repo两个文件,......
  • Java 文件路径/URL/URI操作汇总
    Java文件路径/URL/URI操作汇总路径操作汇总URI/相对/拒绝/路径/文件 packagecn.netkiller.test;importjava.io.File;publicclassTest{publicTest(){}publicstaticvoidmain(String[]args)throwsException{Stringpath......
  • Cisco Secure Network Analytics 7.5.1 - 领先的网络检测和响应 (NDR) 解决方案
    CiscoSecureNetworkAnalytics7.5.1-领先的网络检测和响应(NDR)解决方案SecureNetworkAnalytics(formerlyStealthwatch)-NetworkVisibilityandSegmentation请访问原文链接:https://sysin.org/blog/cisco-secure-network-analytics/,查看最新版。原创作品,转载请保......
  • 数据格式化汇总
    数值格式化1.1设置小数点位数df['column_name']=df['column_name'].round(2)#保留两位小数1.2使用apply自定义格式化df['column_name']=df['column_name'].apply(lambdax:'{:,.2f}'.format(x))#逗号分隔符1.3格式化为百分比d......
  • STM32单片机编程调试常见问题(二) Keil5软件调试中常见的配置问题
    文章目录一.概要二.‌Keil5‌调试时无法打断点并且部分代码语句执行被优化三.Keil5烧录STM32程序代码后无法自动复位四.Keil5调试时Watch界面中的变量不会实时更新五.Keil5编译后无法进行goto跳转到变量或函数六.Keil5编辑时注释输入中文显示乱码问号七.Keil5退出调试......
  • Linux运维常见故障排查和处理的技巧汇总
    常见问题解决集锦1.shell脚本不执行问题:某天研发某同事找我说帮他看看他写的shell脚本,死活不执行,报错。我看了下,脚本很简单,也没有常规性的错误,报“:badinterpreter:Nosuchfileordirectory”错。看这错,我就问他是不是在windows下编写的脚本,然后在上传到linux服务器的……......