当前位置: 首页 > news >正文

vue3 全局注册自定义指令,input聚焦失焦展示对应值

简单举例:聚焦大写英文、失焦小写英文

创建一个专门的文件来存放自定义指令,例如 directives/modifyOnFocusBlur.js

export const modifyOnFocusBlur = {mounted(el: { value: string; dispatchEvent: (arg0: Event) => void; addEventListener: (arg0: string, arg1: { (): void; (): void }) => void; _focusHandler: () => void; _blurHandler: () => void }, binding: { arg: string; modifiers: { required: any }; value: string }) {// 聚焦时的处理函数const handleFocus = () => {// 自定义聚焦时的行为if (binding.arg === 'upperlower') {el.value = el.value.toUpperCase();}// 通知 v-model 更新el.dispatchEvent(new Event('input'));};// 失焦时的处理函数const handleBlur = () => {if (binding.arg === 'upperlower') {el.value = el.value.toLowerCase();}// 通知 v-model 更新el.dispatchEvent(new Event('input'));};// 添加事件监听器el.addEventListener('focus', handleFocus);el.addEventListener('blur', handleBlur);// 保存事件处理函数引用,以便后续移除el._focusHandler = handleFocus;el._blurHandler = handleBlur;},beforeUnmount(el: { removeEventListener: (arg0: string, arg1: any) => void; _focusHandler: any; _blurHandler: any }) {// 移除事件监听器,防止内存泄漏el.removeEventListener('focus', el._focusHandler);el.removeEventListener('blur', el._blurHandler);delete el._focusHandler;delete el._blurHandler;},
};

全局注册指令

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import { modifyOnFocusBlur } from './directives/modifyOnFocusBlur';const app = createApp(App);// 全局注册自定义指令
app.directive('modify-on-focus-blur', modifyOnFocusBlur);app.mount('#app');

在组件中使用自定义指令

<input v-model="message" v-modify-on-focus-blur:upperlower placeholder="输入内容">

相关文章:

  • NXP iMX8MP ARM 平台多屏幕克隆显示测试
  • kuka, fanuc, abb机器人和移动相机的标定
  • 对golang中CSP的理解
  • 学习记录:DAY28
  • 7.3.隐私合规
  • [春秋云镜] Brute4Road 仿真场景
  • 使用JMETER中的JSON提取器实现接口关联
  • ASP.NET中Tailspin Travel的UI层奥秘分析
  • 电机密集型工厂环境下的无线通信技术选型与优化策略
  • C++:书架
  • SPDK NVMe of RDMA 部署
  • 软考速通攻略之邪修提醒篇
  • 命名视图~
  • Node.js数据抓取技术实战示例
  • BERT模型讲解
  • AI汽车时代的全面赋能者:德赛西威全栈能力再升级
  • 【Python】超全常用 conda 命令整理
  • C++中static关键字详解:不同情况下的使用方式
  • 浏览器节能机制导致Websocket断连的坑
  • CentOS 7 系统下安装 OpenSSL 1.0.2k 依赖问题的处理
  • 要更加冷静地看待“东升西降”的判断
  • 道指跌逾100点,特斯拉涨近5%
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序
  • 中日有关部门就日本水产品输华问进行第三次谈判,外交部回应
  • 习近平出席俄罗斯纪念苏联伟大卫国战争胜利80周年庆典