Vue 方法與事件處理器

来源:http://www.cnblogs.com/historylyt/archive/2017/10/24/7722146.html
-Advertisement-
Play Games

轉載博客園jiangxiaobo,最近需要接觸vue方面的東西. 方法與事件處理器 方法處理器 可以用 v-on 指令監聽 DOM 事件: 我們綁定了一個單擊事件處理器到一個方法 greet。下麵在 Vue 實例中定義這個方法: 內聯語句處理器 除了直接綁定到一個方法,也可以用內聯 JavaScri ...


轉載博客園jiangxiaobo,最近需要接觸vue方面的東西.

方法與事件處理器

方法處理器

可以用 v-on 指令監聽 DOM 事件:

<div id="example">
  <button v-on:click="greet">Greet</button>
</div>

我們綁定了一個單擊事件處理器到一個方法 greet。下麵在 Vue 實例中定義這個方法:

複製代碼
var vm = new Vue({
  el: '#example',
  data: {
    name: 'Vue.js'
  },
  // 在 `methods` 對象中定義方法
  methods: {
    greet: function (event) {
      // 方法內 `this` 指向 vm
      alert('Hello ' + this.name + '!')
      // `event` 是原生 DOM 事件
      alert(event.target.tagName)
    }
  }
})

// 也可以在 JavaScript 代碼中調用方法
vm.greet() // -> 'Hello Vue.js!'
複製代碼

內聯語句處理器

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

複製代碼
<div id="example-2">
  <button v-on:click="say('hi')">Say Hi</button>
  <button v-on:click="say('what')">Say What</button>
</div>

new Vue({
  el: '#example-2',
  methods: {
    say: function (msg) {
      alert(msg)
    }
  }
})
複製代碼

類似於內聯表達式,事件處理器限製為一個語句。

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

<button v-on:click="say('hello!', $event)">Submit</button>
複製代碼
// ...
methods: {
  say: function (msg, event) {
    // 現在我們可以訪問原生事件對象
    event.preventDefault()
  }
}
複製代碼

事件修飾符

在事件處理器中經常需要調用 event.preventDefault() 或 event.stopPropagation()。儘管我們在方法內可以輕鬆做到,不過讓方法是純粹的數據邏輯而不處理 DOM 事件細節會更好。

為瞭解決這個問題,Vue.js 為 v-on 提供兩個 事件修飾符:.prevent 與 .stop。你是否還記得修飾符是點號打頭的指令尾碼?

複製代碼
<!-- 阻止單擊事件冒泡 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修飾符可以串聯 -->
<a v-on:click.stop.prevent="doThat">

<!-- 只有修飾符 -->
<form v-on:submit.prevent></form>
複製代碼

1.0.16 添加了兩個額外的修飾符:

<!-- 添加事件偵聽器時使用 capture 模式 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只當事件在該元素本身(而不是子元素)觸發時觸發回調 -->
<div v-on:click.self="doThat">...</div>

按鍵修飾符

在監聽鍵盤事件時,我們經常需要檢測 keyCode。Vue.js 允許為 v-on 添加按鍵修飾符:

<!-- 只有在 keyCode 是 13 時調用 vm.submit() -->
<input v-on:keyup.13="submit">

記住所有的 keyCode 比較困難,Vue.js 為最常用的按鍵提供別名:

<!-- 同上 -->
<input v-on:keyup.enter="submit">

<!-- 縮寫語法 -->
<input @keyup.enter="submit">

全部的按鍵別名:

複製代碼
enter
tab
delete
esc
space
up
down
left
right
複製代碼

1.0.8+: 支持單字母按鍵別名。

1.0.17+: 可以自定義按鍵別名:

// 可以使用 @keyup.f1
Vue.directive('on').keyCodes.f1 = 112

為什麼在 HTML 中監聽事件?

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

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

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ORM是O和R的映射。O代錶面向對象,R代表關係型資料庫。二者有相似之處同時也各有特色。就是因為這種即是又非的情況,才需要做映射的。 理想情況是,根據關係型資料庫(含業務需求)的特點來設計資料庫。同時根據面向對象(含業務需求)的特點來設計模型(實體類)。然後再去考慮如何做映射。但是理想很骨jian感 ...
  • 我所理解的DUBBO 相對於傳統web開發框架,dubbo更加適合於並行系統開發,分散式,模塊化。將server和client都註冊到zookeeper註冊中心上,然後由最外層客戶端發起請求到相應client上,client再調用server。所謂模塊化,舉例說明,將一個電商系統分隔成用戶,商品,進 ...
  • A代碼編輯器,線上模版編輯,仿開發工具編輯器,pdf線上預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿 ...
  • 一、vue腳手架跨域問題 1.跨域問題 文件config/index.js 原始代碼: proxyTable修改如下: "參考資料" 2.遠程訪問問題 目的:寫好的項目希望在其他電腦上或手機上查看。 方法: 打開文件 config/index.js,在dev對象中添加一個屬性host,值為本機的ip ...
  • 最近火的不能再火的日誌框架就是ELK,其中E(Elasticsearch)表示日誌存儲,L(Logstash)表示日誌收集,K(kibana)表示日誌的UI界面,用來查詢和分析,而其中的L可以使用Fluentd來代替,並且以上架構都可以通過docker來進行快速的部署。 它們的工作流程 fluent ...
  • 本文帶來一個垂直方向的手風琴插件開發,可以定製的功能如下: 調用方法: 效果預覽: 效果預覽: 完整的手風琴插件代碼: html部分: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <!--作者:ghostwu(吳華)--> 5 <meta char ...
  • 本文來源於多年的 JavaScript 編碼技術經驗,適合所有正在使用 JavaScript 編程的開發人員閱讀。本文的目的在於幫助大家更加熟練的運用 JavaScript 語言來進行開發工作。 ...
  • 最近自己在學習Vue.js,在看一些課程的時候可能Vue更新太塊了導致課程所講知識和現在Vue的版本不符,從而報錯,我會在以後的帖子持續更新Vue的變化與更新,大家也可以一起交流,共同監督學習! 1.關於Vue中$index獲取索引值已經取消,多用於多個元素的操作,像ul中的li,通過v-for來建 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...