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.rhkb.cn/news/370405.html

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

相关文章

海外发稿: 秘鲁-区块链新闻媒体通稿宣发

秘鲁媒体单发 随着全球化的不断深入&#xff0c;海外发稿已经成为众多企业宣传推广的重要方式之一。而在海外发稿的选择中&#xff0c;秘鲁媒体的地位尤为重要。秘鲁作为南美洲的重要国家之一&#xff0c;拥有众多知名媒体平台&#xff0c;包括diariodelcusco、serperuano、el…

ElasticSearch 如何计算得分及一个不太成熟的使用

1.背景 最近在做 ES 相关东西&#xff0c;只最会在查询的时候给不同的字段设置不同的权重&#xff0c;但是得分具体怎么算的不太明白&#xff0c;花了4-5 天研究和总结了一下。这样不至于被别人问到“这个分数怎么算出来的&#xff1f;”&#xff0c;两眼一抹黑&#xff0c;不…

【OnlyOffice】桌面应用编辑器,插件开发大赛,等你来挑战

OnlyOffice&#xff0c;桌面应用编辑器&#xff0c;最近版本已从8.0升级到了8.1 从PDF、Word、Excel、PPT等全面进行了升级。随着AI应用持续的火热&#xff0c;OnlyOffice也在不断推出AI相关插件。 因此&#xff0c;在此给大家推荐一下OnlyOffice本次的插件开发大赛。 详细信息…

最新扣子(Coze)实战案例:使用扩图功能,让你的图任意变换,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 微信关注公从号&#xff1a;斜杠君&#xff0c;可获取完整版教程。&a…

Qt扫盲-QRect矩形描述类

QRect矩形描述总结 一、概述二、常用函数1. 移动类2. 属性函数3. 判断4. 比较计算 三、渲染三、坐标 一、概述 QRect类使用整数精度在平面中定义一个矩形。在绘图的时候经常使用&#xff0c;作为一个二维的参数描述类。 一个矩形主要有两个重要属性&#xff0c;一个是坐标&am…

ingress-nginx控制器证书不会自动更新问题

好久没更新了&#xff0c;正好今天遇到了一个很有意思的问题&#xff0c;在这里给大家分享下&#xff0c;同时也做下记录。 背景 最近想做个实验&#xff0c;当k8s集群中secret更新后&#xff0c;ingress-nginx控制器会不会自动加载新的证书。我用通义千问搜了下&#xff0c;…

SAR目标检测

Multi-Stage with Filter Augmentation 多阶段滤波器增强(MSFA) 对SAR合成孔径雷达目标检测性能的改善 MSFA ON SAR 传统方法: 预训练:传统方法开始于在通用数据集上预训练一个基础模型。 微调:这个预训练的模型会被微调以适应特定的SAR图像&#xff0c;试图缩小域间的差距 …

webSocket网页通信---使用js模拟多页面实时通信

webSocket是什么 WebSocket是一种先进的网络技术&#xff0c;它提供了一种在单个TCP连接上进行全双工通信的能力。传统的基于HTTP的通信是单向的&#xff0c;即客户端发起请求&#xff0c;服务器响应请求&#xff0c;然后连接关闭。但是&#xff0c;WebSocket允许服务器和客户端…

anaconda中下载压缩包并用conda安装包

有时直接conda安装包时会出错&#xff1b;报错PackagesNotFoundError: The following packages are not available from current channels 比如 conda install -y bioconda::ucsc-gtftogenepred #直接安装报错 #直接下载压缩包安装https://blog.csdn.net/weixin_45552562/ar…

解决vscode配置C++编译带有中文名称报错问题

在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…

读书到底有什么意义?从笨小孩到名人的逆袭之路

点击上方△腾阳 关注 作者 l 腾阳 转载请联系授权 读书到底有什么意义&#xff1f; 有一个鸟语花香的农场里&#xff0c;住着老农夫和他的小孙子。 老农夫经常在清晨会坐在窗边&#xff0c;捧着厚厚的《圣经》&#xff0c;沉浸在知识的海洋里。 小孙子问他&#xff1a;…

豆瓣评分9.6,这本书不看损失巨大!

点击上方△腾阳 关注 转载请联系授权 这些年&#xff0c;我就像是个热心向导&#xff0c;逢人就劝读那本《毛泽东选集》。 结果呢&#xff1f;有人一听就摆手&#xff0c;笑言&#xff1a;“哎呀&#xff0c;那书太高大上了&#xff0c;咱啃不动啊&#xff01;” 特别是咱们…

Elasticsearch:Painless scripting 语言(一)

Painless 是一种高性能、安全的脚本语言&#xff0c;专为 Elasticsearch 设计。你可以使用 Painless 在 Elasticsearch 支持脚本的任何地方安全地编写内联和存储脚本。 Painless 提供众多功能&#xff0c;这些功能围绕以下核心原则&#xff1a; 安全性&#xff1a;确保集群的…

kubernetes集群部署:node节点部署和CRI-O运行时安装(三)

关于CRI-O Kubernetes最初使用Docker作为默认的容器运行时。然而&#xff0c;随着Kubernetes的发展和OCI标准的确立&#xff0c;社区开始寻找更专门化的解决方案&#xff0c;以减少复杂性和提高性能。CRI-O的主要目标是提供一个轻量级的容器运行时&#xff0c;它可以直接运行O…

推荐Bulk Image Downloader插件下载网页中图片链接很好用

推荐&#xff1a;Bulk Image Downloader chome浏览器插件下载图片链接&#xff0c;很好用。 有个网页&#xff0c;上面放了数千的gif的电路图&#xff0c;手工下载会累瘫了不可。想找一个工具分析它的静态链接并下载&#xff0c;找了很多推荐的下载工具&#xff0c;都是不能分…

容器:queue(队列)

以下是关于queue容器的总结 1、构造函数&#xff1a;queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素&#xff1a;front()、back() 4、获取栈的大小&#xff1a;size() 5、判断栈是否为空&#xff1a;empty() #include <iostream> #include …

ubuntu设置开启自动挂载sftp

1. 前言 与其说 ubuntu 开启自动挂载 sftp, 更确切的说应该是 nautilus (ubuntu上默认的文件管理器) 开机自动挂载 sftp。 因为 这里即使选择永远记住&#xff0c;开机也不会自动挂载 sftp 2.设置方法 gnome-session-properties #开机只启动设置命令设置 gio mount sftp…

ListView 的简单使用及 ArrayAdapter 中参数详解

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD&#xff0c;日常还会涉及Android开发工作。 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起…

Java | Leetcode Java题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; class Solution {int[][] dirs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};public List<String> findWords(char[][] board, String[] words) {Trie trie new Trie();for (String word : words) {trie.insert(word);}Set<String> a…

【JVM 的内存模型】

1. JVM内存模型 下图为JVM内存结构模型&#xff1a; 两种执行方式&#xff1a; 解释执行&#xff1a;JVM是由C语言编写的&#xff0c;其中有C解释器&#xff0c;负责先将Java语言解释翻译为C语言。缺点是经过一次JVM翻译&#xff0c;速度慢一点。JIT执行&#xff1a;JIT编译器…