1.4.Vue 的模板事件

Vue 的模板事件

1. 最常見和推薦的做法。將復雜的邏輯封裝在 methods 中。

<!-- ? 正確:調用 methods 中的方法 -->
<button @click="handleClick">點擊我</button>
new Vue({methods: {handleClick(event) {// 這里可以寫任意語句if (this.isValid) {this.saveData();} else {console.log('數據無效');}// 其他復雜邏輯...}}
});

2. 使用內聯表達式(簡單邏輯)

對于非常簡單的邏輯,可以直接在 @click 后寫一個表達式。

<!-- ? 正確:使用表達式 -->
<button @click="counter++">增加計數</button>
<button @click="name = 'Vue'">設置名字</button>
<button @click="say('hi')">打招呼</button>
new Vue({data: {counter: 0,name: ''},methods: {say(message) {alert(message);}}
});

3. 使用內聯函數調用(帶參數或事件)

如果需要傳遞參數或訪問原生事件對象,可以使用內聯箭頭函數或普通函數調用。

<!-- ? 正確:使用內聯函數 -->
<button @click="(event) => deleteItem(id, event)">刪除</button>
<button @click="() => { if (confirm('確定?')) doSomething() }">確認操作</button>
new Vue({data: {id: 1},methods: {deleteItem(id, event) {console.log('刪除 ID:', id, '事件:', event);},doSomething() {// ...}}
});

錯誤的寫法(直接寫語句)

以下寫法是無效的,會導致錯誤或不按預期工作:

<!-- ? 錯誤:直接寫 if 語句 -->
<button @click="if (ok) { return message }">錯誤示例</button><!-- ? 錯誤:直接寫 for 循環 -->
<button @click="for (let i=0; i<10; i++) { console.log(i) }">錯誤示例</button><!-- ? 錯誤:直接寫 var 聲明 -->
<button @click="var a = 1; a + 2">錯誤示例</button>

總結

  • 在?v-on?事件綁定中,不能直接寫?if,?for,?var?等 JavaScript 語句
  • 可以寫:
    • 方法調用@click="methodName"?(推薦用于復雜邏輯)
    • 簡單表達式@click="counter++"?或?@click="name='Vue'"
    • 內聯函數調用@click="(event) => handler(id, event)"?或?@click="() => { /* 簡單邏輯 */ }"
  • 復雜邏輯應始終放在?methods?選項中,并在事件綁定中調用該方法。

事件對象傳遞

處理事件時可以使用原生的 event 對象,也可以通過 $event 來引用這個對象。

1.直接使用?event

假設我們有一個按鈕,點擊時調用一個方法,并且該方法需要訪問事件對象:

<button @click="handleClick">點擊我</button>

對應的 Vue 實例方法可能如下所示:

new Vue({el: '#app',methods: {handleClick(event) { // 直接將事件對象作為參數傳遞console.log('事件類型:', event.type); // 輸出 'click'console.log('事件目標:', event.target); // 輸出觸發事件的元素}}
});

在這個例子中,Vue 自動將觸發事件的原生 DOM 事件對象作為第一個參數傳遞給 handleClick 方法。這種方式清晰直觀,適合于不需要額外參數的情況。

2.使用?$event

$event 是 Vue 提供的一個特殊變量,用于在內聯事件處理器表達式中顯式地引用原生 DOM 事件對象。這種方式通常在你需要同時傳遞自定義參數并訪問事件對象時使用。

示例

假設我們有一個按鈕,點擊時不僅要傳遞某個特定參數(比如 id),還需要訪問點擊事件的信息:

<button @click="deleteItem(id, $event)">刪除</button>

對應的 Vue 實例:

new Vue({el: '#app',data: {id: 1},methods: {deleteItem(id, event) { // 同時接收自定義參數和事件對象console.log('要刪除的ID:', id);console.log('事件對象:', event);// 可以在這里執行其他操作,例如阻止默認行為或停止事件冒泡event.stopPropagation();}}
});

在這個例子中,當我們點擊按鈕時,deleteItem 方法會被調用,并且會接收到兩個參數:一個是 id,另一個是 $event,即原生的 DOM 事件對象。這里的關鍵點在于通過 $event 顯式地將事件對象傳遞給了方法。

3.使用?內置的event

<button @click="(event) => deleteItem(id, event)">刪除</button>

在第一節體驗vue中,我們直接使用 event傳遞. 會有一個弊端.如果event是 data的成員.那么event就不能正確指向dom事件對象.

<button v-on:click="greet(event)">event測試</button>new Vue({el: '#example',data: {event: 'Hello Vue!',},methods: {             greet: function (e) {alert(e);             }}
}

  1. $event (Vue 特殊變量)

    • 這是 Vue.js 框架提供的一個特殊變量
    • 總是指向被觸發的原生 DOM 事件對象(例如?MouseEvent,?KeyboardEvent?等)。
    • 無論你在?v-on?指令的值中如何使用它,$event?的值就是那個原始的、由瀏覽器生成的事件對象。
  2. event (JavaScript 變量/標識符)

    • 這只是一個普通的 JavaScript?變量名標識符
    • 它的值取決于當前 JavaScript 作用域中名為?event?的變量是什么。

    • 在 Vue 的模板表達式里,event?會被當作一個變量來查找。它可能指向:

      • window.event?(如果存在)。
      • 一個在 Vue 實例?data?或?methods?中定義的名為?event?的變量

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91183.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91183.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91183.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQLite 子查詢詳解

SQLite 子查詢詳解 引言 SQLite 是一種輕量級的數據庫&#xff0c;以其簡單、易用和跨平臺而著稱。在數據庫查詢中&#xff0c;子查詢是一個非常重要的概念&#xff0c;它允許我們在查詢中使用查詢結果。本文將詳細講解 SQLite 中的子查詢&#xff0c;包括其定義、用法以及在實…

可以組成網絡的服務器 - 華為OD統一考試(JavaScript 題解)

題目描述 在一個機房中,服務器的位置標識在n*m的整數矩陣網格中,1表示單元格上有服務器,0表示沒有。如果兩臺服務器位于同一行或者同一列中緊鄰的位置,則認為它們之間可以組成一個局域網,請你統計機房中最大的局域網包含的服務器個數。 輸入描述 第一行輸入兩個正整數,…

redis,MongoDB等未授權訪問靶場復現

redis未授權訪問在docker中啟動vulhub對應的靶場目錄&#xff1a;cd /vulhub-master/redis/4-unacc在kali上安裝redis程序進行服務連接安裝redis apt-get install redis redis鏈接 redis-cli -h IP -p 端口輸入info可以查看信息接下來我們使用redis-rogue-server來獲取命令執行…

設計模式:代理模式 Proxy

目錄問題解決方案結構代碼代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在將請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f; 舉個例子&#xff1a; 有這樣一…

Linux零基礎Shell教學全集(可用于日常查詢語句,目錄清晰,內容詳細)(自學尚硅谷B站shell課程后的萬字學習筆記,附課程鏈接)

此文章為學習了 尚硅谷B站課程 后的學習筆記 【尚硅谷】Shell腳本從入門到實戰_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1hW41167NW/?spm_id_from333.337.search-card.all.click&vd_source68e0bbe20c8b1102b59ced40f67db628注意&#xff1a;需要先學Linux基礎…

GitLab 中的分支和標簽的定義及操作

&#xff08;一&#xff09;GitLab 中的分支和標簽的定義及操作 1. 分支&#xff08;Branch&#xff09; 定義&#xff1a; 分支是代碼倉庫中的獨立開發路徑&#xff0c;允許你在不影響主線&#xff08;通常是 main 或 master 分支&#xff09;的情況下&#xff0c;進行實驗、開…

第2章 cmd命令基礎:常用基礎命令(3)

Hi~ 我是李小咖&#xff0c;主要從事網絡安全技術開發和研究。 本文取自《李小咖網安技術庫》&#xff0c;歡迎一起交流學習&#x1fae1;&#xff1a;https://imbyter.com 本節介紹的命令有顯示系統信息&#xff08;systeminfo&#xff09;、啟動指定程序&#xff08;start&am…

RabbitMQ 發送方確認的兩大工具 (With Spring Boot)

核心概念解析 發布者確認機制的核心思想是&#xff1a;將消息投遞的可靠性從“盡力而為”提升為“契約保證”。生產者不再是“發后不理”&#xff0c;而是與 Broker 建立一個雙向的溝通渠道。 在 Spring AMQP 的封裝下&#xff0c;這個機制主要由兩個回調接口實現&#xff1a; …

KONG API Gateway中的核心概念

在使用Kong API Gateway&#xff08;API網關&#xff09;時&#xff0c;理解其核心概念是掌握其工作原理的基礎。這些概念既體現了Kong的設計哲學&#xff0c;也決定了它如何適配復雜的API管理場景&#xff08;如微服務、多團隊協作等&#xff09;。本文將系統梳理Kong的核心概…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題 摘要 在開發過程中&#xff0c;我們經常會遇到各種模塊安裝的問題&#xff0c;尤其是在使用PyCharm時&#xff0c;經常會遇到pip install時的…

3 運算符與表達式

運算符&#xff1a;對字面量或者變量進行操作的符號 表達式&#xff1a;用運算符把字面量或者變量連接起來符合java語法的式子就可以稱作表達式不同運算符連接的表達式體現的是不同類型的表達式int a 10; int b 20; int c a b;&#xff1a;運算符&#xff0c;并且是算術運算…

MySQL的單行函數:

目錄 函數的理解&#xff1a; MySQL的內置函數及分類&#xff1a; 單行函數&#xff1a; 數值函數&#xff1a; 基本函數&#xff1a; 角度與弧度互換函數&#xff1a; 三角函數&#xff1a; 指數與對數&#xff1a; 進制轉換&#xff1a; 字符串函數&#xff1a; 日…

設計模式(二十一)行為型:狀態模式詳解

設計模式&#xff08;二十一&#xff09;行為型&#xff1a;狀態模式詳解狀態模式&#xff08;State Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于允許一個對象在其內部狀態改變時改變其行為&#xff0c;使得對象看起來像是修改了它的…

深入理解 Doris Compaction:提升查詢性能的幕后功臣

在 Doris 的數據存儲與查詢體系里&#xff0c;Compaction 是保障查詢效率、優化存儲結構的關鍵機制。如果你好奇 Doris 如何在高頻寫入后仍能高效響應查詢&#xff0c;或是想解決數據版本膨脹帶來的性能問題&#xff0c;這篇關于 Compaction 的深度解析值得收藏 &#x1f447; …

css 實現虛線效果的多種方式

使用邊框實現虛線 通過設置元素的邊框樣式來實現虛線效果。以下為示例代碼: .dashed {border: 1px dashed black; }使用 CSS 偽元素實現虛線 使用偽元素來模擬虛線的效果。以下為示例代碼: .dashed::before {content: "";display: block;height: 1px;border-bo…

深入剖析 RocketMQ 分布式事務:原理、流程與實踐

Apache RocketMQ 是一種分布式消息隊列系統&#xff0c;支持分布式事務消息&#xff0c;以確保在分布式系統中數據的一致性。它通過一種基于兩階段提交(2PC)的機制結合補償邏輯來實現分布式事務的最終一致性。以下是對 RocketMQ 分布式事務的詳細講解&#xff0c;包括其核心概念…

具身智能 自動駕駛相關崗位的技術棧與能力地圖

一、硬技能技術棧&#xff08;優先級排序&#xff09; 1. 核心領域技術&#xff08;★★★★★&#xff09;技術方向具體技能學習建議大模型實戰- VLA架構&#xff08;RT-2、PaLM-E&#xff09;開發/微調- 多模態對齊&#xff08;CLIP、Flamingo&#xff09;- 生成式策略&#…

實現了加載 正向 碰撞 雅可比 仿真

""" # 此示例從 URDF 文件中加載一個 UR10 機械臂的模型 # 隨后演示 Pinocchio 庫的基本功能,如正向運動學計算 # 雅可比矩陣計算、碰撞檢測以及動力學仿真 """ # 導入 meshcat 的幾何模塊,用于創建和管理可視化的幾何對象 import meshcat.geo…

【0基礎PS】PS工具詳解--畫筆工具

目錄前言一、畫筆工具的位置與快捷鍵?二、畫筆工具選項欄設置?三、畫筆工具的進階應用?四、常見問題及解決方法?總結前言 在 Photoshop 的眾多工具中&#xff0c;畫筆工具無疑是極具創造力和實用性的工具之一。無論是進行圖像繪制、照片修飾&#xff0c;還是特效制作&…

window10和ubuntu22.04雙系統之卸載ubuntu系統

window10和ubuntu22.04雙系統之卸載ubuntu系統&#xff09;1. 刪除Ubuntu系統占用的磁盤分區&#xff08;在Windows下操作&#xff09;2. 刪除ubuntu開機引導項1. winr出來終端提示框后輸入2. 然后會在命令行中顯示電腦的硬盤列表&#xff0c;輸入命令選擇安裝Windows的那個硬盤…