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.mzph.cn/bicheng/42019.shtml

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

相关文章

[leetcode hot 150]第一百一十七题,填充每个节点的下一个右侧节点

题目&#xff1a; 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL 。 初始状态下&#x…

NVIDIA的vGPU技术或AMD的MxGPU技术

目录 将物理GPU资源切分为多个虚拟GPU(vGPU) 实现步骤 技术示例 优点与挑战 结论 NVIDIA的vGPU技术或AMD的MxGPU技术 NVIDIA的vGPU技术 AMD的MxGPU技术 将物理GPU资源切分为多个虚拟GPU(vGPU) 将物理GPU资源切分为多个虚拟GPU(vGPU)主要依赖于GPU虚拟化技术。这种…

pytorch LLM训练过程中的精度调试实践

pytorch LLM训练过程中的精度调试实践 1.查看权值的最大,最小值2.检测训练过程中的异常值A.通过hook module,检测异常值B.拦截算子,检测异常值,打印调用栈,保存输入参数,方便复现C.拦截算子,同时执行cpu计算,对比误差,找到第一个精度异常的算子D.以上的代码 3.根据上面dump的数…

dreamerV3 控制人形机器人行走举例

DreamerV3模型 DreamerV3 是一种先进的强化学习算法,它结合了模型预测控制(MPC)和深度学习,能够在复杂环境中实现高效的学习和控制。DreamerV3 通过构建环境的动态模型并使用该模型进行多步预测和优化,来学习复杂任务如人形机器人行走。 DreamerV3 原理简介 DreamerV3 …

flutter背景贴图的困难总结

需求&#xff1a;一张前景图&#xff0c;一张背景图。背景图可以放大缩小&#xff0c;可以平移。 复盘一下整个烦闷之旅。 困难一&#xff0c;保存成文件。 遇到了几个十分难受的问题。 现在回看是很简单&#xff0c;代码也没几行&#xff0c;可中间的思考过程是十分痛苦的&a…

FPGA_HDLBits:2.2Vectors2.3ModulesHierarchy

FPGA_HDLBits:2.2Vectors&2.3ModulesHierarchy 说明:仅对自己做的HDL Bits中的2.2-2.3章节题目的错误部分做的记录&#xff0c;正确的也就没有记录&#xff0c;可以理解为个人的错题本 对于reg [15:0]input input[0:7]是调用低位而不是取最高位&#xff0c;而且调的是最低…

SpringSecurity6.x使用教程

SpringSecurity6.x使用 SpringSecurity版本 SpringSecurity目前支持的版本如下图所示&#xff0c;可以看到5.x的版本过几年就不会再维护了&#xff0c;6.x将成为主流。 入门 引入依赖 <dependency><groupId>org.springframework.boot</groupId><arti…

CMS Made Simple v2.2.15 远程命令执行漏洞(CVE-2022-23906)

前言 CVE-2022-23906 是一个远程命令执行&#xff08;RCE&#xff09;漏洞&#xff0c;存在于 CMS Made Simple v2.2.15 中。该漏洞通过上传头像功能进行利用&#xff0c;攻击者可以上传一个经过特殊构造的图片文件来触发漏洞。 漏洞详情 CMS Made Simple v2.2.15 中的头像上…

【C++/STL】优先级队列的介绍与模拟实现仿函数

✨ 万物与我皆是自由诗 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1…

关于string的‘\0‘与string,vector构造特点加部分特别知识点的讨论

目录 前言&#xff1a; 问题一&#xff1a;关于string的\0问题讨论 问题二&#xff1a;C标准库中的string内存是分配在堆上面吗&#xff1f; 问题三&#xff1a;string与vector的capacity大小设计的特点 问题四&#xff1a;string的流提取问题 问题五&#xff1a;迭代器失…

unity 使用UnityWebRequest从服务器下载

IEnumerator WinFile(string url){//连接urlusing(UnityWebRequest uwr UnityWebRequest.Get(url)){//等待下载yield return uwr.SendWebRequest();//判断是否连接失败以及是否返回一个错误状态码if (uwr.result UnityWebRequest.Result.ConnectionError || uwr.result Unit…

04.ffmpeg打印音视频媒体信息

目录 1、相关头文件 2、相关结构体 3、相关函数 4、函数详解 5、源码附上 1、相关头文件 #include <libavformat/avformat.h> 包含格式相关的函数和数据结构 #include <libavutil/avutil.h> 包含一些通用实用函数 2、相关结构体 AV…

【PWN · ret2syscall | GoPwn】[2024CISCN · 华中赛区]go_note

一道GoPwn&#xff0c;此外便是ret2syscall的利用。然而过程有不小的曲折&#xff0c;参考 返璞归真 师傅的wp&#xff0c;堪堪完成了复现。复现过程中&#xff0c;师傅也灰常热情回答我菜菜的疑问&#xff0c;感谢&#xff01;2024全国大学生信息安全竞赛&#xff08;ciscn&am…

RabbitMQ快速入门 - 图像化界面的简单操作

目录 1、RabbitMQ的安装 2、RabbitMQ基本介绍 3、简单案例 4、数据隔离 1、RabbitMQ的安装 官网链接&#xff1a;rabbitmq官网 &#xff08;官网很详细&#xff0c;也可以在官网学习啦~&#xff09; 基础入门&#xff1a;自主学习&#xff1a;最新版本&#xff1a;安装我…

缓存-缓存的使用与基本详解

1.缓存使用 为了系统性能的提升&#xff0c;我们一般都会将部分数据放入缓存中&#xff0c;加速访问。而db承担数据落盘工作。 哪些数据适合放入缓存&#xff1f; 即时性、数据一致性要求不高的访问量大且更新频率不高的数据&#xff08;读多&#xff0c;写少&#xff09; …

如何配置 PostgreSQL 以实现高可用性和故障转移?

文章目录 一、高可用性和故障转移的概念&#xff08;一&#xff09;数据复制&#xff08;二&#xff09;监控和检测&#xff08;三&#xff09;快速切换 二、实现高可用性和故障转移的技术方案&#xff08;一&#xff09;流复制&#xff08;Streaming Replication&#xff09;&…

轻松创建对象——简单工厂模式(Java实现)

1. 引言 大家好&#xff0c;又见面了&#xff01;在上一篇文章中&#xff0c;我们通过Python示例介绍了简单工厂模式&#xff0c;今天&#xff0c;我们继续深入这个话题&#xff0c;用Java来实现简单工厂模式。 2. 什么是简单工厂模式 简单工厂模式&#xff08;Simple Facto…

idea部署war包成功,但是接口404

场景 项目结构 xxx-xxx-app xxx-xxx-service xxx-xxx-webappapp/webapp依赖service&#xff0c;service中写了各种api&#xff0c;先别管它合不合理&#xff0c;正式环境用webapp发布。 本地配置tomcat启动&#xff0c;但是发现每次部署成功&#xff0c;但是service中的接口…

Laravel模型事件完全指南:触发应用程序的动态行为

标题&#xff1a;Laravel模型事件完全指南&#xff1a;触发应用程序的动态行为 在Laravel框架中&#xff0c;模型事件提供了一种优雅的方式来处理Eloquent模型生命周期中的各种关键时刻。通过监听和响应这些事件&#xff0c;开发者可以自动化许多常见的任务&#xff0c;如日志…

【TB作品】脉搏测量,ATMEGA8单片机,Proteus仿真,ATmega8控制脉搏测量与显示系统

硬件组成&#xff1a; LCD1602脉搏测量电路&#xff08;带灯&#xff09;蜂鸣器报警按键设置AT24C02 功能&#xff1a; &#xff08;1&#xff09;LCD1602主页显示脉搏、报警上限、报警下限&#xff1b; &#xff08;2&#xff09;五个按键&#xff1a;按键1&#xff1a;切换设…