實際前端開發中,常用指令的封裝

實際前端開發中,常用指令的封裝

    • 全局指令處理步驟
      • main.ts
      • 指令目錄結構
      • src/directives/index.ts
    • 一、輸入框空格禁止指令
      • 1、指令文件clearSpace.ts
      • 2、指令使用

全局指令處理步驟

main.ts

import { createApp } from "vue";
import App from "./App.vue";
import { setupGlobDirectives } from "@/directives";const app = createApp(App);
// 注冊全局指令
setupGlobDirectives(app);
app.mount("#app");

指令目錄結構

在這里插入圖片描述

src/directives/index.ts

import type { App } from "vue";
import { setupNoSpaceDirective } from "./clearSpace";export function setupGlobDirectives(app: App) {setupNoSpaceDirective(app);
}

一、輸入框空格禁止指令

1、禁止輸入空格; 2、粘貼空格文本時,自動取消所有空格

1、指令文件clearSpace.ts

import type { App } from "vue";//  v-no-space: 自定義指令處理輸入框的空格,如            SJFW0012 025062    301000 00007
//  通過自定義指令在去掉空格的同時,也實現了響應式function insertTextAtCursor(inputElement: any, text: any) {// 獲取當前光標位置const start = inputElement.selectionStart;const end = inputElement.selectionEnd;// 獲取輸入框的當前值const value = inputElement.value;// 在光標位置插入文本const newValue = value.substring(0, start) + text + value.substring(end);// 更新輸入框的值inputElement.value = newValue;// 計算新的光標位置const newCursorPos = start + text.length;// 設置新的光標位置inputElement.setSelectionRange(newCursorPos, newCursorPos);// 觸發 input 事件,以便 Vue 等框架可以捕獲到變化const event = new Event("input", { bubbles: true, cancelable: true });inputElement.dispatchEvent(event);
}const noSpaceDirective = {mounted(el: any) {const input = el.tagName === "INPUT" ? el : el.querySelector("input");if (input) {// 處理輸入事件const handleInput = () => {const start = input.selectionStart;const value = input.value;const newValue = value.replace(/\s/g, "");// 更新輸入框的值if (value !== newValue) {input.value = newValue;// 觸發v-model更新el.dispatchEvent(new Event("input"));// 恢復光標位置const diff = value.length - newValue.length;setTimeout(() => {input.setSelectionRange(start - diff, start - diff);}, 0);}};// 處理粘貼事件const handlePaste = (e: any) => {e.preventDefault();// const text = (e.clipboardData || (window as any).clipboardData).getData("text");// const cleanedText = text.replace(/\s/g, "");// // 插入清理后的文本,b被棄用了// document.execCommand("insertText", false, cleanedText);// 獲取剪貼板內容const clipboardData = e.clipboardData || (window as any).clipboardData;const pastedText = clipboardData.getData("text");// 清理文本(去掉空格)const cleanedText = pastedText.replace(/\s/g, "");// 將清理后的文本插入到當前光標位置insertTextAtCursor(e.target, cleanedText);};// 阻止空格鍵輸入const handleKeydown = (e: any) => {if (e.key === " " || e.key === "Spacebar" || e.keyCode === 32) {e.preventDefault();}};input.addEventListener("input", handleInput);input.addEventListener("paste", handlePaste);input.addEventListener("keydown", handleKeydown);// 存儲事件處理函數以便卸載el.__noSpaceHandlers = { handleInput, handlePaste, handleKeydown };}},beforeUnmount(el: any) {if (el.__noSpaceHandlers) {const { handleInput, handlePaste, handleKeydown } = el.__noSpaceHandlers;const input = el.tagName === "INPUT" ? el : el.querySelector("input");if (input) {input.removeEventListener("input", handleInput);input.removeEventListener("paste", handlePaste);input.removeEventListener("keydown", handleKeydown);}delete el.__noSpaceHandlers;}},
};// 自定義 v-no-space 指令
export function setupNoSpaceDirective(app: App) {app.directive("no-space", noSpaceDirective);
}export default noSpaceDirective;

2、指令使用

在這里插入圖片描述

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

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

相關文章

鴻蒙OH南向開發 輕量系統內核(LiteOS-M)【異常調測】

基本概念 OpenHarmony LiteOS-M提供異常接管調測手段,幫助開發者定位分析問題。異常接管是操作系統對運行期間發生的異常情況進行處理的一系列動作,例如打印異常發生時異常類型、發生異常時的系統狀態、當前函數的調用棧信息、CPU現場信息、任務調用堆棧…

算法-堆排序

文章目錄 整體架構流程技術細節小結 整體架構流程 大頂推:是構建一個完整的二叉樹 大頂推:即父節點的值大于左右子樹的值。 循環構建大頂推 在給定的數組,既可以明確樹的高度。 在循環的時候,構建樹的高度從lgn至0。即從堆低往堆…

【鴻蒙HarmonyOS Next App實戰開發】二維碼生成技術實現與解析

隨著移動應用開發中對便捷交互體驗的需求日益增長,二維碼作為信息傳遞的重要載體,其生成與使用變得越來越普遍。本文將基于鴻蒙HarmonyOS應用開發框架,詳細介紹如何實現一個功能完備的二維碼生成器,并附上完整代碼解析。 注意該實…

1 Studying《Is Parallel Programming Hard》6-9

目錄 Chapter 6 Partitioning and Synchronization Design 6.1 分區練習 6.2 設計準則 6.3 同步粒度 6.4 并行快速路徑 6.5 超越黨派分歧 6.6 分區、并行和優化 Chapter 7 Locking 7.1 活命 7.2 鎖的類型 7.3 鎖定實施問題 7.4 基于鎖的存在性保證 7.5 鎖定&a…

Java練習題精選16-20

Java練習題精選16-20 一、第十六題二、第十七題三、第十八題四、第十九題五、第二十題一、第十六題 現有一個存放學生成績的數組{66, 77, 88, 99},要求將該數組正序輸出每個下標所對應的元素。 public class Test {public static void main(String[] args) {int<

新能源知識庫(68)汽車電鍍與蒸汽

汽車電鍍是提升零部件耐磨性、抗腐蝕性和美觀性的關鍵工藝&#xff0c;其流程根據基材&#xff08;金屬或塑料&#xff09;和部件功能需求有所差異。 汽車電鍍是以 基材特性和 功能需求為導向的精密工藝&#xff1a; ?金屬件?&#xff1a;核心流程為 ?除油→酸洗→電鍍→鈍…

Veo 3 視頻生成大模型完整操作教程(2025)

隨著 AI 多模態能力的飛躍&#xff0c;Google DeepMind 發布的 Veo 3 成為了生成視頻領域的一顆重磅炸彈。它不僅能夠根據文本生成高質量的視頻畫面&#xff0c;還能同步生成對白、背景音和環境音&#xff0c;是目前最接近真正“AI 導演”的大模型。 本文將帶你詳細了解 Veo 3…

10【認識文件系統】

1 認識硬件——磁盤 1.1 物理構成 磁盤是計算機中唯一的機械設備&#xff0c;同時也是一種外部存儲設備&#xff08;外設&#xff09;。早期的計算機通常配備的是機械硬盤&#xff08;HDD&#xff09;&#xff0c;依靠磁頭和盤片的機械運動來進行數據的讀寫。但隨著用戶對計算…

Windows命令連接符的安全風險分析與防御策略

1. 命令連接符簡介 在 Windows 的命令行環境&#xff08;CMD/PowerShell&#xff09;中&#xff0c;命令連接符用于在同一行執行多個命令&#xff0c;提高效率。然而&#xff0c;攻擊者常利用這些符號構造惡意命令&#xff0c;繞過安全檢測或執行多階段攻擊。 常見命令連接符…

大屏可視化制作指南

一、大屏可視化概述 &#xff08;一&#xff09;概念 大屏可視化是指通過大屏幕展示復雜數據的視覺呈現形式&#xff0c;它借助圖形、圖表、地圖等元素&#xff0c;將海量數據以直觀易懂的方式呈現出來&#xff0c;幫助用戶快速理解數據背后的含義和價值。 &#xff08;二&a…

Halcon ——— OCR字符提取與多類型識別技術詳解

工業視覺實戰&#xff1a;OCR字符提取與多類型識別技術詳解 在工業自動化領域&#xff0c;OCR字符提取是產品追溯、質量控制和信息讀取的核心技術。本文將深入解析Halcon中OCR字符提取的全流程&#xff0c;重點解釋核心算子參數&#xff0c;并提供完整的工業級代碼實現。 一、O…

嵌入式項目:基于QT與Hi3861的物聯網智能大棚集成控制系統

關鍵詞&#xff1a;MQTT、物聯網、QT、網絡連接、遠程控制 一、系統概述 本系統是一套完整的智能大棚監控解決方案&#xff0c;由兩部分構成&#xff1a; 基于Hi3861的嵌入式硬件系統&#xff08;負責環境數據采集和設備控制&#xff09;基于Qt開發的跨平臺控制軟件&#xf…

揭開 Git 裸倉庫的神秘面紗:`git clone --mirror` 詳解與使用指南

大家好&#xff01;在使用 Git 進行版本控制時&#xff0c;我們最熟悉的莫過于那些帶有工作目錄的本地倉庫了——我們在里面編輯文件、提交代碼&#xff0c;然后推送到遠程倉庫。但有時候&#xff0c;我們可能會遇到一種特殊的倉庫&#xff1a;裸倉庫&#xff08;Bare Reposito…

opensuse安裝rabbitmq

您好&#xff01;安裝 RabbitMQ 消息隊列是一個非常棒的選擇&#xff0c;它是許多現代應用架構中的核心組件。 在 openSUSE Tumbleweed 上安裝 RabbitMQ 主要有兩種流行的方式&#xff1a;一種是使用系統的包管理器 zypper&#xff0c;另一種是使用 Docker 容器。我將為您詳細…

超詳細YOLOv8/11圖像菜品分類全程概述:環境、數據準備、訓練、驗證/預測、onnx部署(c++/python)詳解

文章目錄 一、環境準備二、數據準備三、訓練四、驗證與預測五、模型部署 一、環境準備 我的都是在Linux系統下&#xff0c;訓練部署的&#xff1b;模型訓練之前&#xff0c;需要配置好環境&#xff0c;Anaconda、顯卡驅動、cuda、cudnn、pytorch等&#xff1b; 參考&#xff1…

JUC:4.線程常見操作與兩階段終止模式

在線程中&#xff0c;wait()、join()、sleep()三個方法都是進行阻塞的方法。對應可以使用interrupt()方法進行打斷&#xff0c;被打斷后線程會拋出打斷異常&#xff0c;但是不會修改IsInterrupt&#xff0c;也就是此時去調用IsInterrupted()方法后獲得的實際上是false。 而當線…

分布式session解決方案

在實際項目中&#xff0c;前臺代碼部署在nginx中&#xff0c;后臺服務內嵌了tomcat運行在不同的節點中&#xff0c;常見的架構如下&#xff1a; 在上述架構中&#xff0c;nginx轉發前臺請求&#xff0c;第一次登錄后&#xff0c;將用戶登錄信息寫入到一臺服務session中&#xf…

UDP 緩沖區

UDP 有接收緩沖區&#xff0c;沒有發送緩沖區 引申問題 1、為什么沒有發送緩沖區&#xff1f; 直接引用原文 “因為 UDP 是不可靠的&#xff0c;它不必保存應用進程的數據拷貝&#xff0c;因此無需一個真正的發送緩沖區” 2、沒有發送緩沖區的情況下&#xff0c;sendto 的數…

解密 C++ 中的左值(lvalue)與右值(rvalue)的核心內容

在 C 中&#xff0c;表達式&#xff08;expression&#xff09; 可以被歸類為左值或右值。最簡單的理解方式是&#xff1a; 左值&#xff08;lvalue&#xff09;&#xff1a; 能放在賦值號 左邊的表達式&#xff0c;通常表示一個有名字、有內存地址、可以持續存在的對象。你可…

MATLAB(2)選擇結構

選擇結構又可以叫做分支結構&#xff0c;它根據給定的條件是否成立&#xff0c;決定程序運行的方向。在不同的條件下執行不同的操作。 MATLAB可以用來實現選擇結構的語句有三種&#xff1a;if語句、switch語句、try語句。 一.if語句 1.if語句 1.1條件為矩陣的情況 if語句的…