Vue.js-06:第六章 - 按鍵修飾符的使用

来源:https://www.cnblogs.com/danvic712/archive/2018/11/16/9966847.html
-Advertisement-
Play Games

一、前言 上周末的時候,準備試試將 ASP.NET Core 的項目部署到 CentOS 伺服器上,結果在一個接一個坑裡面跳,最後 Supervisor 守護程式還是有問題,於是,採用重裝系統大招,結果,碰巧趕上 aspnetcore 的一個 bug( Missing package dotnet- ...


 一、前言

   上周末的時候,準備試試將 ASP.NET Core 的項目部署到 CentOS 伺服器上,結果在一個接一個坑裡面跳,最後 Supervisor 守護程式還是有問題,於是,採用重裝系統大招,結果,碰巧趕上 aspnetcore 的一個 bug( Missing package dotnet-runtime 2.1.6 for CentOS),嗯,最後 dotnet core 環境裝不上了,原本打算更新的 .NET Core 文章以及日常的 Vue 學習計劃也暫時擱淺了。

  在之前的 Vue 的學習中,我們學習瞭如何使用事件修飾符去處理 DOM 事件,而在某些實際場景中,我們也需要去設定各種按鍵事件去優化頁面的交互,本章,我們來學習下在 Vue 中如何去監聽鍵盤事件。

  學習系列目錄地址:https://www.cnblogs.com/danvic712/p/9549100.html

  倉儲地址:https://github.com/Lanesra712/VueTrial/blob/master/Chapter01-Rookie/modifiers/keyboard.html

 二、乾貨合集

  1、按鍵修飾符

  在日常的頁面交互中,我們經常會遇到這種需求:用戶輸入賬號密碼後點擊 Enter 鍵、一個多選篩選條件通過點擊多選框後自動載入符合選中條件的數據等等。在傳統的前端開發中,當我們碰到這種類似的需求時,我們往往需要知道 js 中需要監聽的按鍵所對應的 keyCode,然後通過判斷 keyCode 得知用戶是按下了那個按鍵,繼而執行後續的操作。例如,在下麵的示例中,當我們鬆開 Enter 按鍵後控制台就會列印出姓名輸入框內的值。

1 <label>姓名:</label>
2 <input id="name" type="text">
3 
4 $('#name').on('keyup',function(event){
5     event.preventDefault();//阻止瀏覽器預設動作
6     if(event.Code == 13){
7         console.log($(this).val());
8     }
9 });

  而在 Vue 中,給我們提供了一種便利的方式去實現監聽我們的按鍵事件。在監聽鍵盤事件時,我們經常需要查找常見的按鍵所對應的 keyCode,而 Vue 為最常用的按鍵提供了別名。

1 .enter
2 .tab
3 .delete (捕獲“刪除”和“退格”鍵)
4 .esc
5 .space
6 .up
7 .down
8 .left
9 .right

  在下麵的代碼中,我們同樣監聽了 input 框的 Enter 事件,而我們只需要在綁定的 input 標簽的 keyup 事件上添加 .enter 修飾符即可。

 1 <div id="app">
 2     <label>姓名:</label>
 3     <input id="name" type="text" v-model:value="name" @keyup.enter="log">
 4 </div>
 5 
 6 <script>
 7     var vm = new Vue({
 8         el: '#app',
 9         data: {
10             name: ''
11         },
12         methods: {
13             log() {
14                 console.log(`name:${this.name}`);
15             }
16         }
17     })
18 </script>

  

  當然,對於標準的104鍵盤,Vue 不可能幫我們把所有的按鍵鍵值都定義好,這也不現實。於是,Vue 給我們提供了一種通過定義全局 config.keyCodes 來自定義按鍵修飾符的別名的方式。例如,在上面的例子中,我們是通過 Enter 按鍵獲取到輸入的文本框的值,現在,我們的需求變了,需要我們通過 F2 按鍵來獲得文本框的值,這時我們就可以通過自定義按鍵修飾符來實現操作。

 1 <div id="app">
 2     <label>姓名:</label>
 3     <input id="name" type="text" v-model:value="name" @keyup.prevent.f2="logF2">
 4 </div>
 5 
 6 <script>
 7     //通過 keyCode 自定義按鍵修飾符
 8     Vue.config.keyCodes.f2 = 113
 9 
10     var vm = new Vue({
11         el: '#app',
12         data: {
13             name: ''
14         },
15         methods: {
16             logF2() {
17                 console.log(`name:${this.name} --- 通過 F2 按鍵獲得`);
18             }
19         }
20     })
21 </script>

  

  2、系統修飾符

  在 Vue 的2.1.0版本中,開發者又為我們提供了系統修飾符來實現僅在按下相應按鍵時才觸發滑鼠或鍵盤事件的監聽器事件。

1 //鍵盤按鍵修飾符
2 .ctrl
3 .alt
4 .shift
5 .meta
6 //滑鼠鍵盤修飾符
7 .left
8 .right
9 .middle

  在 Mac 系統鍵盤上,meta 對應 command 鍵 (⌘)。在 Windows 系統鍵盤 meta 對應 Windows 徽標鍵 (⊞)。在 Sun 操作系統鍵盤上,meta 對應實心寶石鍵 (◆)。在其他特定鍵盤上,尤其在 MIT 和 Lisp 機器的鍵盤、以及其後繼產品,比如 Knight 鍵盤、space-cadet 鍵盤,meta 被標記為“META”。在 Symbolics 鍵盤上,meta 被標記為“META”或者“Meta”。

  可能你會覺得,這和按鍵修飾符也沒什麼差別啊,都是按下按鍵然後執行操作啊,看了看官方文檔的解釋,em,好像更暈了。既然如此我們來使用試試。在下麵的案例中,我們為 input 輸入框綁定 ctrl 按鍵事件,我們來看看與按鍵修飾符的使用有什麼區別。

 1 <div id="app">
 2     <label>姓名:</label>
 3     <input id="name" type="text" v-model:value="name" @keyup.ctrl="log">
 4 </div>
 5 
 6 <script>
 7     var vm = new Vue({
 8         el: '#app',
 9         data: {
10             name: ''
11         },
12         methods: {
13             log() {
14                 console.log(`name:${this.name}`);
15             }
16         }
17     })
18 </script>

  可能你在疑問,我在乾什麼,如果你自己嘗試就會發現,當我們在狂點 ctrl 按鍵時,控制台不會輸出任何信息,所以說,我們自定義的方法其實並沒有執行。仔細看看,官方文檔中的示例,系統修飾符的使用示例中,都是綁定了兩個的修飾符,難道,系統修飾符必須和其它的按鍵修飾符一起使用才可以生效嗎?我們來繼續嘗試。

  在下麵的示例中,我們將 ctrl 系統修飾符與 keyCode 為67(C)的按鍵修飾符一起使用看看。

 1 <div id="app">
 2     <label>姓名:</label>
 3     <input id="name" type="text" v-model:value="name" @keyup.ctrl.67="log">
 4 </div>
 5 
 6 <script>
 7     var vm = new Vue({
 8         el: '#app',
 9         data: {
10             name: ''
11         },
12         methods: {
13             log() {
14                 console.log(`name:${this.name}`);
15             }
16         }
17     })
18 </script>

  

  可能 gif 圖表達的不是很清楚,當我點擊 ctrl 按鍵時,沒有執行我們的 log 方法,當我點擊 c 按鍵時也並沒有執行我們的自定義方法,可是當我按下 ctrl 按鍵時,又點擊 c 按鍵時(這裡的操作等同於你在編輯文檔時使用 ctrl+c 組合按鍵),卻執行了我們自定義的 log 方法。通過多次嘗試,可以發現當我們寫如下代碼的時候,我們會發現如果僅僅使用系統修飾鍵是無法觸發 keyup 事件的。

1 <div id="app">
2     <label>姓名:</label>
3     <input id="name" type="text" v-model:value="name" @keyup.ctrl="log">
4 </div>

  還是之前的代碼,在測試的過程中,不知你是否發現,當我們綁定一個 ctrl 系統修飾符時,當我們同時使用多個系統修飾符也會觸發我們的自定義事件,這肯定與我們所需要的不同。於是 Vue 在2.5.0版本中新增了 .exact 修飾符允許我們控制由精確的系統修飾符組合觸發的事件。例如在下麵的代碼中,我們限制只能使用 ctrl+按鍵修飾符,卻不能使用多個系統修飾符+按鍵修飾符一起使用。你可以親身嘗試下,你會發現,當我們使用 ctrl+c、ctrl+s 時會觸發我們的自定義 log 事件,可是當你使用 ctrl+alt+c 時就不會觸發我們的自定義 log 事件。

1 <div id="app">
2     <label>姓名:</label>
3     <input id="name" type="text" v-model:value="name" @keyup.ctrl.exact="log">
4 </div>

  類似的在 Vue 的2.2.0版本中,開發者又為我們提供了滑鼠按鈕修飾符去觸發滑鼠事件監聽器。例如下麵的代碼所示,當我們滑鼠右鍵點擊我們的按鈕時才會觸發我們的自定義 log 事件。

1 <div id="app">
2     <input id="name" type="text" v-model:value="name">
3     <button @click.right="log">log</button>
4 </div>

 三、總結

  1、對於 keyup 事件,按鍵修飾符可以直接使用,而系統修飾符則是以一種組合按鍵的形式使用。

  2、我們可以通過全局 config.keyCodes 對象自定義按鍵修飾符別名,也可以直接使用 keyCode 為按鍵設定按鍵修飾符。

 四、參考

  1、vue修飾符--可能是東半球最詳細的文檔(滑稽)


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

-Advertisement-
Play Games
更多相關文章
  • 1 信息檢索概述 1.1 傳統檢索方式的缺點 • 文件檢索 操作系統常見的是硬碟文件檢索 文檔檢索:整個文檔打開時已經載入到記憶體了; 缺點:全盤遍歷,慢,記憶體的海量數據 • 資料庫檢索 like "%三星%" 全表遍歷; like "三星%" 最左特性 不會全表遍歷; 無法滿足海量數據下準確迅速的定 ...
  • 大數據已經成為時代發展的趨勢,很多人紛紛選擇學習大數據,想要進入大數據行業。大數據技術體系龐大,包括的知識較多,系統的學習大數據可以讓你全面掌握大數據技能。學習大數據需要掌握哪些知識?1、學習大數據首先要學習Java基礎怎樣進行大數據學習的快速入門?學大數據課程之前要先學習一種電腦編程語言。Jav ...
  • 歸檔文件過大,會導致資料庫出現異常,無法登陸。 1.D盤下新建一個delete_arch.txt文件 2.新建一個批處理文件deleArch.bat(把記事本的尾碼修改為.bat就行) 3.雙擊運行deleArch.bat就可以刪除歸檔日誌 4.可以把這個批處理添加到計劃任務中,定時執行(基本操作, ...
  • 現有資料庫使用字元集是GBK,做讀寫分離的時候,發現讀庫的資料庫安裝錯誤,使用了UTF8的字元集 需要把讀庫的字元集進行調整。 1.進入PLSQL查看下資料庫字元集 2.進入伺服器的命令行控制台,通過cmd進入 3.關閉資料庫 4.啟動資料庫掛載 5.使用資料庫追蹤 6.開啟限制會話模式 7. 8. ...
  • 什麼是二次排序 待排序的數據具有多個欄位,首先對第一個欄位排序,再對第一欄位相同的行按照第二欄位排序,第二次排序不破壞第一次排序的結果,這個過程就稱為二次排序 如何在mapreduce中實現二次排序 mapreduce的工作原理 MR的工作原理如下圖(如果看不清可右鍵新標簽頁查看): 圖片部分數據參 ...
  • 簡介 備份mysql資料庫一直是一個比較噁心的工作,主要就是備份的資料庫比較大實在是慢。最近開始使用xtrabackup來備份資料庫,速度上快了很多,尤其還原速度要快的多。下麵我將從安裝開始簡要介紹一下如何使用xtrabackup來備份資料庫。 定義:xtrabackup工具是percona公司用p ...
  • Category原理 - Category編譯之後的底層結構是 struct categroy_t,裡面存儲著分類對象方法、屬性、協議信息- 當程式運行時,通過runtime動態的將分類的方法、屬性、協議合併到一個大數組中- 底層使用的是二維數組進行存儲,比如:[[分類2方法列表],[分類1方法列表 ...
  • 一,效果圖。 二,代碼。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>javascript 用法</title> </head> <body> <!--使用 window.alert()--> <h1>我的第一個頁面</h1 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...