当前端Vue3为插槽添加单击事件但会立即执行的代码错误

news2024/11/24 10:01:53

在你的代码中,你希望根据传入的 `record` 对象动态生成表格操作的配置数组,并且每个操作都有对应的点击事件处理函数。然而,你的代码中存在一些常见的问题需要解决。让我们逐步来看一下:

问题分析

1. 函数调用问题:
   在 `getTableAction` 方法中,你试图为每个操作项的 `onClick` 属性赋值一个函数调用结果,例如 `yulan(record)` 和 `xiazai(record)`。这种写法会立即调用 `yulan(record)` 和 `xiazai(record)` 函数,而不是为点击事件提供一个回调函数。

2. 正确的写法:
   为了正确地为点击事件提供回调函数,你需要传递一个匿名函数或箭头函数,而不是直接调用函数。这样可以保证点击事件发生时才触发相应的函数调用。

### 解决方案

你可以通过修改 `getTableAction` 方法来返回正确的操作配置数组,确保 `onClick` 属性是一个函数。

```javascript
<TableAction :actions="getTableAction(record)" />

<script>
export default {
  methods: {
    getTableAction(record) {
      return [
        {
          label: '报表预览',
          onClick: () => this.yulan(record), // 使用箭头函数延迟调用 yulan 函数
        },
        {
          label: '下载',
          onClick: () => this.xiazai(record), // 使用箭头函数延迟调用 xiazai 函数
        },
      ];
    },
    yulan(record) {
      console.log(record);
      // 执行报表预览相关逻辑
    },
    xiazai(record) {
      console.log(record);
      // 执行下载相关逻辑
    },
  },
};
</script>
```

### 修改说明

- 在 `getTableAction` 方法中,通过使用箭头函数 `() => this.yulan(record)` 和 `() => this.xiazai(record)`,确保点击事件时调用相应的函数,而不是立即执行。
- 在 Vue 组件中,使用 `this.yulan(record)` 和 `this.xiazai(record)` 来调用组件实例中定义的 `yulan` 和 `xiazai` 方法。

注意事项

- 确保在 Vue 组件中正确绑定方法,以便在模板中使用。
- 使用箭头函数可以绑定正确的 `this` 上下文,确保方法在组件实例中被调用。
- 确保 `record` 对象能够正确传递给相应的方法,以便在处理点击事件时使用。

通过以上修改,应该能够实现根据传入的 `record` 对象动态生成表格操作配置,并在点击操作时调用相应的方法处理逻辑。

在你提供的代码中,出现了立即调用函数的问题是因为你在给 `onClick` 属性赋值时,直接调用了函数而不是传递一个函数的引用。让我们来详细解释一下为什么会出现这个问题以及如何避免。

### 原因分析

在 JavaScript 中,当你编写像 `onClick: yulan(record)` 这样的代码时,`yulan(record)` 这个函数会立即执行,并且会把执行结果赋值给 `onClick` 属性。这并不是你想要的行为,因为你希望 `onClick` 属性保存的是一个函数引用,而不是函数的返回值。

### 解决方案

为了正确地将函数作为事件处理函数传递,你需要使用箭头函数或匿名函数来包装你的函数调用,确保在事件触发时才执行函数。

#### 使用箭头函数或匿名函数

```javascript
<TableAction :actions="getTableAction(record)" />

<script>
export default {
  methods: {
    getTableAction(record) {
      return [
        {
          label: '报表预览',
          onClick: () => this.yulan(record), // 使用箭头函数包装函数调用
        },
        {
          label: '下载',
          onClick: () => this.xiazai(record), // 使用箭头函数包装函数调用
        },
      ];
    },
    yulan(record) {
      console.log(record);
      // 执行报表预览相关逻辑
    },
    xiazai(record) {
      console.log(record);
      // 执行下载相关逻辑
    },
  },
};
</script>
```

#### 使用 `bind` 方法

另一种常见的方式是使用 `bind` 方法来绑定函数的上下文和参数:

```javascript
<TableAction :actions="getTableAction(record)" />

<script>
export default {
  methods: {
    getTableAction(record) {
      return [
        {
          label: '报表预览',
          onClick: this.yulan.bind(this, record), // 使用 bind 方法绑定函数
        },
        {
          label: '下载',
          onClick: this.xiazai.bind(this, record), // 使用 bind 方法绑定函数
        },
      ];
    },
    yulan(record) {
      console.log(record);
      // 执行报表预览相关逻辑
    },
    xiazai(record) {
      console.log(record);
      // 执行下载相关逻辑
    },
  },
};
</script>
```

### 选择合适的方法

使用箭头函数或 `bind` 方法都可以解决立即调用函数的问题。这样做会将函数作为一个整体的回调函数传递给 `onClick`,在点击事件触发时才真正执行相应的函数,而不是在渲染过程中立即执行。

### 总结

在 Vue 组件中,特别是在处理事件处理函数时,需要注意传递的是一个函数引用而不是函数的执行结果。通过使用箭头函数或 `bind` 方法来正确地包装函数,可以确保在需要执行事件处理函数时才执行,避免在渲染过程中立即调用函数。

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

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

相关文章

天天搞3D模型可视化大屏,怎能不懂点three.js知识。

three.js是一个基于WebGL的JavaScript库&#xff0c;用于在网页上创建交互式的3D图形和动画。对于可视化大屏来说&#xff0c;three.js具有以下价值&#xff1a; 丰富的3D效果&#xff1a;通过three.js&#xff0c;可以实现各种丰富多样的3D效果&#xff0c;如旋转、缩放、平移…

IDEA使用Maven生成普通项目没有生成iml文件解决方法

右击主目录选择&#xff1a; Open in Terminal 在生成的控制台输入&#xff1a; mvn idea:module 回车便自动生成iml文件啦&#xff01; 双击下主目录就可以看见啦

【除了协程还有哪些方式可以实现异步编程】

在Unity中&#xff0c;除了使用协程实现异步编程外&#xff0c;还有以下几种方法&#xff1a; 异步加载资源&#xff1a; 使用UnityWebRequest类进行异步加载资源&#xff0c;这在加载网络资源或动态加载资源时非常有用。 using UnityEngine; using UnityEngine.Networking;…

快速搭建webase-front并且部署合约

PS: 因为我开发时候要用到fisco和webase-front,避免官方文档粘贴, 因此直接整理下面的笔记。开发的时候,好粘贴。1.搭建4节点联盟链 前提 curl 一种命令行工具 apt install -y openssl curl创建操作目录, 下载安装脚本 cd ~ && mkdir -p fisco && cd fisco…

跟我学做零售数据分析报表-商品滞销分析

商品滞销的情况很常见&#xff0c;因此商品滞销分析也是基本属于零售数据分析标配内容之一。那么&#xff0c;商品滞销分析报表该怎么做&#xff1f;要做计算哪些指标&#xff0c;怎么分析滞销趋势&#xff1f;别急&#xff0c;奥威BI零售数据分析方案预设了一张BI商品滞销分析…

【生态系统服务】MAXENT、PLUS、USLE、INVEST、供需、VORS、SRP模型、SolVES、NPP及碳源、碳汇、CENTURY、生态经济学

生态系统服务&#xff08;ecosystem services&#xff09;是指人类从生态系统获得的所有惠益&#xff0c;包括供给服务&#xff08;如提供食物和水&#xff09;、调节服务&#xff08;如控制洪水和疾病&#xff09;、文化服务&#xff08;如精神、娱乐和文化收益&#xff09;以…

1.数据结构---顺序表

ArrayList 在new的时候并没有进行内存的分配 此时才进行内存分配 两个结论: 第一次Add的时候分配大小为10的内存 扩容是1.5倍扩容

springboot+vue+mybatis基于协同过滤算法的新闻推荐系统+PPT+论文+讲解+售后

本系统为用户而设计制作新闻推荐系统&#xff0c;旨在实现新闻推荐智能化、现代化管理。本新闻推荐管理自动化系统的开发和研制的最终目的是将新闻推荐管理的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的便利和条件。使新闻推…

servlet-会话(cookie与session)

servlet会话技术 会话技术cookie创建Cookieindex.jspCookieServlet 获取Cookieindex.jspshowCookie session创建sessionindex.jsplogin.jspLoginServlet 获取sessionRedurectServket 清除会话login.jspClearItmeServlet 会话技术 两种会话&#xff1a;cookie&#xff0c;sessi…

先发优势奠基,三清互联占据有利市场地位

随着我国配电自动化技术的发展&#xff0c;配电网逐步由自动化迈向数字智能化。配电智能化是运用计算机技术、自动控制技术、电子技术和通信技术等&#xff0c;对配电网进行离线与在线的智能化监控管理&#xff0c;使配电网始终处于安全、可靠、优质、经济、高效的运行状态。其…

Java线程池(更新中)

1.线程池介绍 顾名思义&#xff0c;线程池就是管理一系列线程的资源池&#xff0c;其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息&#xff0c;例如已完成任务的数量。 总结一下使用线程池的好处&#xff1a; 降低资源消耗。通过重复利用已创建的…

ethercat :推荐一个不错的ethercat主从站开源项目

一、引言 最近在研究EtherCAT,也极有兴趣想要搞通整个底层协议&#xff0c;将来有机会搞自己的软件EtherCAT产品。这里推荐一个不错的开源项目&#xff0c;与志同道合的朋友共同学习。 Ethercat-master 主站地址&#xff1a;https://github.com/OpenEtherCATsociety/SOEM Eth…

《intel开发手册卷1》学习笔记1

1、操作模式 IA-32架构支持三种基本操作模式:保护模式、实地址模式和系统管理模式。操作模式决定了哪些指令和体系结构功能是可访问的: 1&#xff09;保护模式&#xff1a;该模式是处理器的自然状态。保护模式的功能之一是能够在受保护的多任务环境中直接执行“实地址模式”80…

视频提取gif怎么制作?试试这个网站一键转换

通过把视频转换成gif动图的操作能够更加方便的在各种平台上分享和传播。相较于视频&#xff0c;gif图片具有较小的文件体积&#xff0c;gif动图能够快速的加载播放&#xff0c;不需要等待就能快速欣赏。很适合从事新媒体之类的小伙伴&#xff0c;可以用来做展示、宣传等。想要实…

Bumblebee X系列用于高精度机器人应用的新型立体视觉产品

Bumblebee X是最新的GigE驱动立体成像解决方案&#xff0c;为机器人引导和拾取应用带来高精度和低延迟。 近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出一款用于高精度机器人应用的新型立体视觉产品Bumblebee X系列。 Bumblebee X产品图 BumblebeeX系列&#xff…

大语言模型LLM入门篇

大模型席卷全球&#xff0c;彷佛得模型者得天下。对于IT行业来说&#xff0c;以后可能没有各种软件了&#xff0c;只有各种各样的智体&#xff08;Agent&#xff09;调用各种各样的API。在这种大势下&#xff0c;笔者也阅读了很多大模型相关的资料&#xff0c;和很多新手一样&a…

CR80清洁卡的重要性

在我们日常生活中&#xff0c;身份证、银行卡、信用卡等塑料卡片已经成为了不可或缺的一部分。这些卡片通常符合CR80标准&#xff0c;这意味着它们的尺寸和厚度符合国际标准&#xff0c;为了保证这些卡片的读取和使用效果&#xff0c;清洁维护显得尤为重要。 什么是CR80卡&…

xxl-job跨集群调度改造

这篇文章为大家提供一种在多k8s集群中部署一套xxl-job的方案。 问题背景&#xff1a; 公司生产环境有多套k8s集群&#xff0c;为保证服务可用&#xff0c;容器需要部署到不同集群中。单集群中容器间可直接通过本地ip访问&#xff0c;跨集群容器间调用需通过宿主ip映射端口访问…

脸上长斑怎么办?教你一招——如何用新型揿针治疗黄褐斑?

点击文末领取揿针的视频教程跟直播讲解 你有没有发现&#xff0c;女性一到了30岁&#xff0c;脸上总是很容易长出斑点&#xff0c;特别是黄褐斑。 ​ 俗话说&#xff0c;一白遮百丑&#xff0c;一斑毁所有&#xff0c;长斑真的让人伤不起&#xff01;很多人因为黄褐斑的出现…

microsoft的azure语音,开发环境运行正常,发布到centos7线上服务器之后,无法运行

最近在做AI语音对话的功能&#xff0c;用到了azure的语音语音服务&#xff0c;开发的时候还算顺利&#xff0c;部署到线上后&#xff0c;发现在正式服上无法完成语音转文本的操作&#xff0c;提示&#xff1a; org.springframework.web.util.NestedServletException: Handler d…