onclick和@click有什么区别,究竟哪个更好使?

哈喽小伙伴们大家好,我是爱学英语的程序员,今天来给大家分享一些关于vue中事件绑定相关的内容,希望对大家有所帮助.

场景是这样的:我要实现一个切换栏,默认激活的是第一个标签,当鼠标移动到第二个标签是,对应的内容让激活.起初,我第一时间想到的是用element plus的组件来实现这个效果,但实现过程中也遇到了一些问题,由于它自带的默认样式没有办法清除,所以我只能写俩div来手动编写样式了.但是实现过程中遇到了一个问题:我的方法没有被定义!?什么玩意儿,我明明定义了呀.

以下是我的实现流程

第一步:写两个div

<div class="selectab" style="display: flex">
  <div id="projectInfo" class="tab-item active-tab" @click="activateTab('projectInfo')">项目信息</div>
  <div id="midTermSummary" class="tab-item" @click="activateTab('midTermSummary')">中期总结</div>
</div>

第二步:编写默认样式和激活的样式

.selectab {
  display: flex;
}
.tab-item {
  margin-right: 20px;
  padding-bottom: 15px;
  color: black; /* 默认颜色 */
  border-bottom: 1px solid transparent; /* 默认无底部边框 */
  cursor: pointer;
}
.tab-item.active-tab {
  color: #6594f1; /* 激活后的颜色 */
  border-bottom-color: #6594f1; /* 激活后的底部边框颜色 */
}

第三步:定义方法

activateTab(tabId: string) {
  // 移除所有标签项的 active-tab 类
  var tabs = document.querySelectorAll('.tab-item');
  tabs.forEach(function(tab) {
    tab.classList.remove('active-tab');
  });

  // 给点击的标签添加 active-tab 类
  var tabToActivate = document.getElementById(tabId);
  if (tabToActivate) {
    tabToActivate.classList.add('active-tab');
  }
},

你以为它能正确运行,然后,现实却是这样的.......

到底问题在哪呢?

看了好久才发现,我的方法绑定有问题!相信,看到这里的你也应该知道问题在哪了吧

在vue中给组件绑定方法用的是@click,谁让你用onclick的,肯定不行呀

改了之后就正常运行了.

那今天既然遇到这个问题了,咱就来好好捋一捋它背后的原理.

因为 Vue.js 和其他现代前端框架采用了一种声明式的方法来管理事件绑定和 DOM 操作,相比传统的 onclick 属性,有以下几个优点:
(1)分离关注点:
使用 @click 或其他类似指令可以将 HTML 结构与 JavaScript 逻辑分离开来。这种方式使得代码更易于理解和维护,因为你可以在模板中专注于声明你希望处理的事件,而不必在 HTML 中插入大段的 JavaScript 代码。
(2)更好的组件化:
在现代前端开发中,通常使用组件化的方式来构建用户界面。每个组件都有自己的模板、样式和逻辑。使用 @click 等指令可以方便地将事件处理逻辑与组件的其他部分隔离开来,使得组件更加可重用和独立。
(3)响应式更新:
Vue.js 的核心概念之一是数据驱动视图的响应式更新。使用 @click 通过 Vue 实例的数据和方法来处理事件,可以确保界面的状态和视图的同步更新,而不需要手动处理 DOM 元素的状态。
(4)更丰富的功能:
@click 和类似的指令提供了更丰富的功能和灵活性。你可以在模板中方便地绑定事件、处理数据、调用方法,甚至传递参数,而传统的 onclick 机制更为受限,通常只能直接调用预定义的全局函数或者直接在 HTML 中写入 JavaScript 代码。

那为什么使用onclick来绑定方法的时候控制台会报错呢,提示方法没有被定义,接下来,情继续往后看

如果你在使用 onclick 属性而不是 Vue.js 中的 @click 指令,并且控制台提示方法未定义,可能有几个原因:
(1)作用域问题:
如果你在使用 onclick 属性时,需要确保定义的 JavaScript 函数在全局作用域内可见。这意味着你的函数不能被包裹在其他作用域(如某个函数、类、或其他代码块)中,否则 HTML 中无法直接访问到它。
(2)加载顺序:
如果在 HTML 中直接使用 onclick 属性调用 JavaScript 函数,确保该函数在 HTML 元素之前已经定义。JavaScript 是逐行解释执行的,如果调用了未定义的函数,就会导致控制台报错。
(3)语法错误:
检查你的 JavaScript 函数是否有语法错误,或者函数名是否拼写正确。即使是小写字母的错误也会导致函数无法正确调用。
(4)事件处理的限制:
onclick 属性仅限于简单的函数调用,它不能像 Vue.js 的 @click 那样处理更复杂的逻辑或传递参数。如果你的函数需要接收参数或处理更复杂的逻辑,可能需要使用更先进的前端框架或库来管理事件和状态。
(5)跨域问题:
在某些情况下,特别是在使用外部资源加载页面或跨域脚本时,浏览器安全策略可能会阻止使用 onclick 调用未定义的函数。确保你的环境允许在 HTML 中直接调用全局函数。

那看到这里,大家觉得我的问题在哪里呢?

很显然,我用的是传统的方法去加载这两个div,然而,加载组件是需要消耗一定的资源和时间的,如果我在这里直接写了两个方法,组件还没有被加载完,方法就已经被调用了,都不存在,你调用谁呢?肯定有问题呀!

好啦,本期文章先到这里,我们下期见!

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

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

相关文章

从 Keycloak 导出和导入 Realm 和用户

1. 首先对keycloak 命令有所了解 需要将 Keycloak 中的 Realm 导出或导入时&#xff0c;您可以使用 JSON 文件进行操作。以下是一些有关导出和导入 Realm 的方法&#xff1a; 导出 Realm 到目录&#xff1a; 使用 export 命令将 Realm 导出到目录。在执行此命令时&#xff0c;…

QT 布局演示例子

效果 源码 #include <QApplication> #include <QWidget> #include <QSplitter> #include <QVBoxLayout> #include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget mainWidget;mainWidget.setWindowTitle(&qu…

Jestson Orin Agx调试欧智通6162C-IC低功耗(BLE)蓝牙模块

一、准备工作 参考上一篇博客BLE低功耗蓝牙 二、使用蓝牙测试工具 gatttool 是 BlueZ 提供的一个工具&#xff0c;用于与 BLE 设备进行交互。 2.1&#xff1a;扫描设备并获取 MAC 地址 首先&#xff0c;你需要扫描你的 BLE 设备并获取其 MAC 地址。使用以下命令扫描设备&a…

数据融合工具(1)指定路径下同名图层合并

情景再现&#xff0c;呼叫小编 ————数据合并时&#xff0c;你是否也经常碰到这些情况&#xff1f; 数据存在几何错误&#xff0c;合并失败&#xff01; 数据字段类型不一致&#xff0c;合并失败&#xff01; 合并工具运行有警告信息&#xff0c;不知道是否合并成功&…

价值499的从Emlog主题模板PandaPRO移植到wordpress的主题

Panda PRO 主题&#xff0c;一款精致wordpress博客主题&#xff0c;令人惊叹的昼夜双版设计&#xff0c;精心打磨的一处处细节&#xff0c;一切从心出发&#xff0c;从零开始&#xff0c;只为让您的站点拥有速度与优雅兼具的极致体验。 从Emlog主题模板PandaPRO移植到wordpres…

GUKE万能工具箱(附带源码)

GUKE万能工具箱&#xff08;附带源码&#xff09; 效果图部分源码领取完整源码下期更新 效果图 部分源码 <!DOCTYPE html> <html><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1"…

化学合成水热釜 加热反应釜 实验室高温高压设备

水热釜&#xff0c;也称为高压消解罐或高压釜&#xff0c;是一种能够在高温高压条件下进行化学反应的实验室设备。它广泛应用于化学、地质、材料科学、环境科学等领域&#xff0c;特别是在需要在高压环境下加速化学反应或溶解难溶物质的实验中。以下是水热釜的一些关键特性和用…

.Net Core + DDD基础分层

基础设施层 基础设施层使用的相关知识&#xff1a;Code First &#xff0c;EF Core&#xff0c;Autofac依赖注入&#xff0c;仓储模式的实现接口&#xff0c;领域服务的实现接口&#xff0c;缓存&#xff0c;以及各种基础工具类 一&#xff0c;Code First&#xff1a;使用Cod…

SaaS行业的AI化征程:穿越“大模型焦虑”,拥抱“AI自信”

随着大模型技术的风起云涌&#xff0c;SaaS行业正站在一个充满机遇与挑战的十字路口。本文旨在深入剖析SaaS厂商在AI化升级过程中所遭遇的“大模型焦虑”&#xff0c;并探索通过战略性的AI应用策略&#xff0c;如何重拾信心&#xff0c;实现产品与服务的华丽转身&#xff0c;为…

【C++】 解决 C++ 语言报错:Invalid Cast

文章目录 引言 无效类型转换&#xff08;Invalid Cast&#xff09;是 C 编程中常见且严重的错误之一。当程序试图进行不合法或不安全的类型转换时&#xff0c;就会发生无效类型转换错误。这种错误不仅会导致程序崩溃&#xff0c;还可能引发不可预测的行为。本文将深入探讨无效…

如何在 Odoo 16 中向新视图添加字段

例如,让我们看看如何在新视图或新操作窗口中创建“many2one”字段。 请考虑下面的屏幕截图,它表示不包含任何字段的新视图类型或客户端操作窗口。 我们现在可以将与“res.partner”关联的“多对一”字段引入到我们的新视图或客户端操作窗口中。 为了实现这一点,在 XML 模板…

万字长文|关于 OpenAI 接口开发你应该知道的一切

这篇文章中个人结合自己的实践经验把 OpenAI 官方文档解读一遍。但是原文档涉及内容众多&#xff0c;包括微调&#xff0c;嵌入&#xff08;Embeddings&#xff09;等众多主题&#xff0c;我这里重点挑选自己开发高频使用到的&#xff0c;需要详细了解的可以自行前往官网阅读。…

24西安电子科技大学数学与统计学院—考研录取情况

24西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分&#xff0c;确实增长浮动比较高&#xff0c;接近30分的水平&#xff0c;因此大家更需要好好去努力&#x…

Android zygote访谈录

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 本文摘要 本文以访谈的方式来带大家了解zygote进程&#xff0c;了解zygote进程是啥&#xff1f;它的作用是啥&#xff1f;它是如何一步…

idea启用多个环境

背景 在平常的后端开发中&#xff0c;需要与前端联调&#xff0c;比较方便的是让前端直接连自己的本地环境&#xff08;毕竟每次都要打包部署到测试环境实在是太麻烦了&#xff09;。但是这样子也有点不好&#xff0c;就是自己功能还没写好呢&#xff0c;结果前端连着自己的环…

如何利用Kimi解读Kimi的KVCache技术细节

最近Kimi公布了一篇Mooncake: Kimis KVCache-centric Architecture for LLM Serving的文章&#xff0c;详细介绍了Kimi背后的推理架构&#xff0c;因此笔者想到用Kimi解读Kimi&#xff0c;梳理相关技术要点如下&#xff0c;供大家参考&#xff1a; 文章 "Mooncake: A KVCa…

2024年中国安防CIS市场现状及主要竞争企业分析

2024年中国安防CIS市场现状及主要竞争企业分析 CIS又名CMOS图像传感器&#xff0c;属于一种光学传感器&#xff0c;将光信号转换为电信号并通过读出电路转为数字化信号&#xff0c;是摄像头模组的核心元器件&#xff0c;可以用于手机、汽车、电脑、安防、消费等领域。不同应用领…

风电升压站3d动画演示定制确保每一名职工都能够安全、健康地工作

海上风电工程建设包括大量的吊装作业、架空作业、埋设作业以及电气作业&#xff0c;涉及面广&#xff0c;风险较高&#xff0c;因此在技能培训上需要格外重视&#xff0c;基于VR安全培训的广泛应用&#xff0c;企业逐渐开始引进VR虚拟仿真技术&#xff0c;利用视觉、听觉和亲身…

内存管理(RTOS)

目录 #RTOS内存管理介绍 #堆定义 #栈定义 #RTOS四种堆分配方案 #Heap_1.c #Heap_2.c #Heap_3.c #Heap_4.c #Heap_5.c #stm32cublemx对堆的配置 #配置堆相关函数 #申请内存函数 #钩子函数 前言&#xff1a;本课程参考韦东山老师视频&#xff0c;连接放在最后。 #R…
最新文章