methods

類型:{ [key: string]: Function }

詳細:

methods 將被混入到 Vue 實例中。可以直接通過 VM 實例訪問這些方法,或者在指令表達式中使用。方法中的 this 自動綁定為 Vue 實例。

注意,不應該使用箭頭函數來定義 method 函數 (例如 plus: () => this.a++)。理由是箭頭函數綁定了父級作用域的上下文,所以 this 將不會按照期望指向 Vue 實例,this.a 將是 undefined

var vm = new Vue({data: { a: 1 },methods: {plus: function () {this.a++}}
})
vm.plus()
vm.a // 2

可以用 v-on 指令監聽 DOM 事件,并在觸發時運行一些 JavaScript 代碼。

<div id="example-1"><button v-on:click="counter += 1">Add 1</button><p>The button above has been clicked {{ counter }} times.</p>
</div>
var example1 = new Vue({el: '#example-1',data: {counter: 0}
})

事件處理方法
然而許多事件處理邏輯會更為復雜,所以直接把 JavaScript 代碼寫在 v-on 指令中是不可行的。因此 v-on 還可以接收一個需要調用的方法名稱。

示例:

<div id="example-2"><!-- `greet` 是在下面定義的方法名 --><button v-on:click="greet">Greet</button>
</div>
var example2 = new Vue({el: '#example-2',data: {name: 'Vue.js'},// 在 `methods` 對象中定義方法methods: {greet: function (event) {// `this` 在方法里指向當前 Vue 實例alert('Hello ' + this.name + '!')// `event` 是原生 DOM 事件if (event) {alert(event.target.tagName)}}}
})// 也可以用 JavaScript 直接調用方法
example2.greet() // => 'Hello Vue.js!'

內聯處理器中的方法

除了直接綁定到一個方法,也可以在內聯 JavaScript 語句中調用方法:

<div id="example-3"><button v-on:click="say('hi')">Say hi</button><button v-on:click="say('what')">Say what</button>
</div>
new Vue({el: '#example-3',methods: {say: function (message) {alert(message)}}
})

有時也需要在內聯語句處理器中訪問原始的 DOM 事件。可以用特殊變量 $event 把它傳入方法:

<button v-on:click="warn('Form cannot be submitted yet.', $event)">Submit
</button>
// ...
methods: {warn: function (message, event) {// 現在我們可以訪問原生事件對象if (event) {event.preventDefault()}alert(message)}
}

事件修飾符

在事件處理程序中調用 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求。盡管我們可以在方法中輕松實現這點,但更好的方式是:方法只有純粹的數據邏輯,而不是去處理 DOM 事件細節。

為了解決這個問題,Vue.js 為 v-on 提供了事件修飾符。之前提過,修飾符是由點開頭的指令后綴來表示的。
.stop
.prevent
.capture
.self
.once
.passive

<!-- 阻止單擊事件繼續傳播 -->
<a v-on:click.stop="doThis"></a><!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form><!-- 修飾符可以串聯 -->
<a v-on:click.stop.prevent="doThat"></a><!-- 只有修飾符 -->
<form v-on:submit.prevent></form><!-- 添加事件監聽器時使用事件捕獲模式 -->
<!-- 即內部元素觸發的事件先在此處理,然后才交由內部元素進行處理 -->
<div v-on:click.capture="doThis">...</div><!-- 只當在 event.target 是當前元素自身時觸發處理函數 -->
<!-- 即事件不是從內部元素觸發的 -->
<div v-on:click.self="doThat">...</div>

使用修飾符時,順序很重要;相應的代碼會以同樣的順序產生。因此,用 v-on:click.prevent.self 會阻止所有的點擊,而 v-on:click.self.prevent 只會阻止對元素自身的點擊。

<!-- 點擊事件將只會觸發一次 -->
<a v-on:click.once="doThis"></a>

不像其它只能對原生的 DOM 事件起作用的修飾符,.once 修飾符還能被用到自定義的組件事件上。如果你還沒有閱讀關于組件的文檔,現在大可不必擔心。

Vue 還對應 addEventListener 中的 passive 選項提供了 .passive 修飾符。

<!-- 滾動事件的默認行為 (即滾動行為) 將會立即觸發 -->
<!-- 而不會等待 `onScroll` 完成  -->
<!-- 這其中包含 `event.preventDefault()` 的情況 -->
<div v-on:scroll.passive="onScroll">...</div>

這個 .passive 修飾符尤其能夠提升移動端的性能。

不要把 .passive.prevent 一起使用,因為 .prevent 將會被忽略,同時瀏覽器可能會向你展示一個警告。請記住,.passive 會告訴瀏覽器你不想阻止事件的默認行為。

按鍵修飾符

在監聽鍵盤事件時,我們經常需要檢查詳細的按鍵。Vue 允許為 v-on 在監聽鍵盤事件時添加按鍵修飾符:

<!-- 只有在 `key` 是 `Enter` 時調用 `vm.submit()` -->
<input v-on:keyup.enter="submit">

你可以直接將 KeyboardEvent.key 暴露的任意有效按鍵名轉換為 kebab-case 來作為修飾符。

<input v-on:keyup.page-down="onPageDown">

在上述示例中,處理函數只會在 $event.key 等于 PageDown 時被調用。
按鍵碼
keyCode 的事件用法已經被廢棄了并可能不會被最新的瀏覽器支持。

使用 keyCode attribute 也是允許的:

<input v-on:keyup.13="submit">

為了在必要的情況下支持舊瀏覽器,Vue 提供了絕大多數常用的按鍵碼的別名:

.enter
.tab
.delete (捕獲“刪除”和“退格”鍵)
.esc
.space
.up
.down
.left
.right
有一些按鍵 (.esc 以及所有的方向鍵) 在 IE9 中有不同的 key 值, 如果你想支持 IE9,這些內置的別名應該是首選。

你還可以通過全局 config.keyCodes 對象自定義按鍵修飾符別名:

// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

系統修飾鍵

可以用如下修飾符來實現僅在按下相應按鍵時才觸發鼠標或鍵盤事件的監聽器。
.ctrl
.alt
.shift
.meta
注意:在 Mac 系統鍵盤上,meta 對應 command 鍵 (?)。在 Windows 系統鍵盤 meta 對應 Windows 徽標鍵 (?)。在 Sun 操作系統鍵盤上,meta 對應實心寶石鍵 (◆)。在其他特定鍵盤上,尤其在 MITLisp 機器的鍵盤、以及其后繼產品,比如 Knight 鍵盤、space-cadet 鍵盤,meta 被標記為“META”。在 Symbolics 鍵盤上,meta 被標記為“META”或者“Meta”。

例如:

.exact 修飾符
.exact 修飾符允許你控制由精確的系統修飾符組合觸發的事件。

<!-- 即使 Alt 或 Shift 被一同按下時也會觸發 -->
<button v-on:click.ctrl="onClick">A</button><!-- 有且只有 Ctrl 被按下的時候才觸發 -->
<button v-on:click.ctrl.exact="onCtrlClick">A</button><!-- 沒有任何系統修飾符被按下的時候才觸發 -->
<button v-on:click.exact="onClick">A</button>

鼠標按鈕修飾符

.left
.right
.middle

這些修飾符會限制處理函數僅響應特定的鼠標按鈕。

為什么在 HTML 中監聽事件?

你可能注意到這種事件監聽的方式違背了關注點分離 (separation of concern) 這個長期以來的優良傳統。但不必擔心,因為所有的 Vue.js 事件處理方法和表達式都嚴格綁定在當前視圖的 ViewModel 上,它不會導致任何維護上的困難。實際上,使用 v-on 有幾個好處:

掃一眼 HTML 模板便能輕松定位在 JavaScript 代碼里對應的方法。

因為你無須在 JavaScript 里手動綁定事件,你的 ViewModel 代碼可以是非常純粹的邏輯,和 DOM 完全解耦,更易于測試。

當一個 ViewModel 被銷毀時,所有的事件處理器都會自動被刪除。你無須擔心如何清理它們。

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

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

相關文章

臨床骨科常用的肩關節疾病量表,醫生必備!

根據骨科醫生的量表使用情況&#xff0c;常笑醫學整理了臨床骨科常用的肩關節疾病量表&#xff0c;為大家分享臨床常見的肩關節疾病量表評估內容&#xff0c;均支持量表下載和在線使用&#xff0c;建議收藏&#xff01; 1.臂、肩、手功能障礙&#xff08;disabilites of the ar…

useradd 在Linux原生應用開發過程中的簡單應用

useradd命令是用于在Linux系統中創建新用戶的命令。它可以創建一個新用戶&#xff0c;并設置該用戶的屬性、家目錄、默認shell等。useradd命令實際上是一個包裝了一系列系統調用的高級命令。 在Linux系統中&#xff0c;用戶信息存儲在/etc/passwd文件中。當執行useradd命令時&…

flstudio21破解漢化版2024最新水果編曲使用教程

? 如果你一直夢想制作自己的音樂(無論是作為一名制作人還是藝術家)&#xff0c;你可能會想你出生在這個時代是你的幸運星。這個水果圈工作室和上一版之間的改進水平確實令人欽佩。這僅僅是FL Studio 21所提供的皮毛。你的音樂項目的選擇真的會讓你大吃一驚。你以前從未有過這…

ChatGPT的常識

什么是ChatGPT&#xff1f; ChatGPT是一個基于GPT模型的聊天機器人&#xff0c;GPT即“Generative Pre-training Transformer”&#xff0c;是一種預訓練的語言模型。ChatGPT使用GPT-2和GPT-3兩種模型來生成自然語言響應&#xff0c;從而與人類進行真實的對話。 ChatGPT的設計…

2023年全球軟件開發大會(QCon廣州站2023)-核心PPT資料下載

一、峰會簡介 本次峰會包含&#xff1a;泛娛樂時代的邊緣計算與通訊、穩定性即生命線、下一代軟件架構、出海的思考、現代數據架構、AGI 與 AIGC 落地、大前端技術探索、編程語言實戰、DevOps vs 平臺工程、新型數據庫、AIGC 浪潮下的企業出海、AIGC 浪潮下的效能智能化、數據…

【池式組件】線程池的原理與實現

線程池的原理與實現 線程池簡介1.線程池1.線程池2.數量固定的原因3.線程數量如何確定4.為什么需要線程池5.線程池結構 線程池的實現數據結構設計1.任務結構2.任務隊列結構3.線程池結構 接口設計 線程池的應用reactorredis 中線程池skynet 中線程池 線程池簡介 1.線程池 1.線程…

第7課 SQL入門之創建計算字段

文章目錄 7.1 計算字段7.2 拼接字段使用別名 7.3 執行算術計算 這一課介紹什么是計算字段&#xff0c;如何創建計算字段&#xff0c;以及如何從應用程序中使用別名引用它們。 7.1 計算字段 存儲在數據庫表中的數據一般不是應用程序所需要的格式&#xff0c;下面舉幾個例子。 …

前端Excel導出實用方案(完整源碼,可直接應用)

目錄 前言&#xff1a; 技術選型&#xff1a; 主要功能點&#xff1a; 核心代碼&#xff1a; 完整代碼&#xff1a; 開發文檔 前言&#xff1a; 在前后端分離開發為主流的時代&#xff0c;很多時候&#xff0c;excel導出已不再由后端主導&#xff0c;而是把導出的操作移…

關于鎖的粒度問題——面試

鎖的粒度劃分主要有三種&#xff1a;表級鎖、頁級鎖和行鎖 1.表級鎖&#xff1a; 對整張表加鎖&#xff0c;粒度最大&#xff0c;加鎖的并發度最低&#xff0c;會導致其他事務無法訪問該表&#xff0c;只有當前事務提交或者回滾后才能釋放鎖。表級鎖適用于對表進行全表操作的場…

DeepIn,UOS統信專業版安裝運行Java,JavaFx程序

因為要適配國產統信UOS系統&#xff0c;要求JavaFx程序能簡便雙擊運行&#xff0c;由于網上UOS開發相關文章少&#xff0c;多數文章沒用&#xff0c;因此花了不少時間&#xff0c;踩了不少坑&#xff0c;下面記錄一些遇到的問題&#xff0c;我的程序環境是jdk1.8&#xff0c;為…

【K8s】Kubernetes CRD 介紹(控制器)

文章目錄 CRD 概述1. 操作CRD1.1 創建 CRD1.2 操作 CRD 2. 其他筆記2.1 Kubectl 發現機制2.2 校驗 CR2.3 簡稱和屬性 3. 架構設計3.1 控制器概覽 參考 CRD 概述 CR&#xff08;Custom Resource&#xff09;其實就是在 Kubernetes 中定義一個自己的資源類型&#xff0c;是一個具…

如何為 3D 模型制作紋理的最佳方法

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 您可以通過不同的方式為 3D 模型創建 3D 紋理。下面我們將介紹為 3D …

《opencv實用探索·十四》VideoCapture播放視頻和視像頭調用

1、VideoCapture播放視頻 #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main() {// 定義相關VideoCapture對象VideoCapture capture;// 打開視頻文件capture.open("1.avi");// 判斷視頻流讀取是否正…

Python os模塊及用法

os 模塊代表了程序所在的操作系統&#xff0c;主要用于獲取程序運行所在操作系統的相關信息。 在 Python 的交互式解釋器中先導入 os 模塊&#xff0c;然后輸入 os.__all__ 命令&#xff08;__all__ 變量代表了該模塊開放的公開接口&#xff09;&#xff0c;即可看到該模塊所包…

Linux DataEase數據可視化分析工具本地部署與遠程訪問

文章目錄 前言1. 安裝DataEase2. 本地訪問測試3. 安裝 cpolar內網穿透軟件4. 配置DataEase公網訪問地址5. 公網遠程訪問Data Ease6. 固定Data Ease公網地址 前言 DataEase 是開源的數據可視化分析工具&#xff0c;幫助用戶快速分析數據并洞察業務趨勢&#xff0c;從而實現業務…

ExecutorService介紹

參考&#xff1a;https://blog.csdn.net/fwt336/article/details/81530581 前言 在開發中為了提高系統的響應速度和處理能力會使用到多線程&#xff0c;但線程的創建和釋放&#xff0c;需要占用不小的內存和資源。如果每次需要使用線程時&#xff0c;都new 一個Thread的話&…

【LeetCode】2723. 兩個 Promise 對象相加

兩個 Promise 對象相加 題目題解 題目 給定兩個 promise 對象 promise1 和 promise2&#xff0c;返回一個新的 promise。promise1 和 promise2 都會被解析為一個數字。返回的 Promise 應該解析為這兩個數字的和。 示例 1&#xff1a; 輸入&#xff1a; promise1 new Promise…

geoserver根據屬性字段值設置不同的顏色

<?xml version"1.0" encoding"UTF-8"?> <StyledLayerDescriptor xmlns"http://www.opengis.net/sld" xmlns:xlink"http://www.w3.org/1999/xlink" xmlns:ogc"http://www.opengis.net/ogc" xmlns:xsi"http:/…

中國聚羥基脂肪酸酯(PHA)市場評估與投資戰略報告(2024版)

內容簡介&#xff1a; PHA英文名稱為 Polyhydroxyalkanoates&#xff0c;是近20多年迅速發展起來的&#xff0c;很多天然原料合成的一種聚酯。PHA是生物基生物降解材料&#xff0c;具有良好的生物相容性和可加工性。防止水汽的穿透是保鮮包裝中的重要指標&#xff0c;PHA 有良…

os.walk()遍歷文件夾/文件

天行健&#xff0c;君子以自強不息&#xff1b;地勢坤&#xff0c;君子以厚德載物。 每個人都有惰性&#xff0c;但不斷學習是好好生活的根本&#xff0c;共勉&#xff01; 文章均為學習整理筆記&#xff0c;分享記錄為主&#xff0c;如有錯誤請指正&#xff0c;共同學習進步。…