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

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

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

TypeScript 复制代码
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;
  },
};

全局注册指令

TypeScript 复制代码
// 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');

在组件中使用自定义指令

TypeScript 复制代码
<input v-model="message" v-modify-on-focus-blur:upperlower placeholder="输入内容">
相关推荐
一 乐2 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
北辰alk3 小时前
Vue 模板引擎深度解析:基于 HTML 的声明式渲染
vue.js
北辰alk3 小时前
Vue 自定义指令完全指南:定义与应用场景详解
vue.js
北辰alk4 小时前
Vue 动态路由完全指南:定义与参数获取详解
vue.js
北辰alk4 小时前
Vue Router 完全指南:作用与组件详解
vue.js
北辰alk4 小时前
Vue 中使用 this 的完整指南与注意事项
vue.js
xkxnq4 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
北辰alk4 小时前
Vue 插槽(Slot)完全指南:组件内容分发的艺术
vue.js
北辰alk4 小时前
Vue 组件中访问根实例的完整指南
vue.js
北辰alk4 小时前
Vue Router 中获取路由参数的全面指南
vue.js