-
先决条件,准备一个input和vue项目。这里使用了vue3项目。
html<template> <input> </template> -
先确定自定义指令的编写方式。在setup里面直接编写。
javascript<template> <input v-input> </template> <script setup> const vInput = { mounted(el, binding, vnode) { console.log("222"); } }; </script> -
测试是否有打印出222。我这边是有直接打印的。
-
我们解释一下他的参数 el,binding,vnode都有什么用,这里我们直接使用官网的图片。

-
其中vnode是虚拟节点。
-
在自定义组件中加入输入框的监听事件,使用el加入addEventListener的时间,就可以实现监听到绑定的指令时,输入框的输入的回调。
javascript<template> <input v-input ref="inputRef"> </template> <script setup> const vInput = { mounted(el, binding, vnode) { if (vnode.type != "input") { return; } el.addEventListener('input', (e) => { const data = e.data; }); } }; </script> -
这边可以实现一个需求,输入框只能输入整数。详细的需求是,如果输入的字母,不会添加到结果的后面。输入的字符可以从e.data中获取。
javascriptel.addEventListener('input', (e) => { console.log("e", e.data); )); -
将输入框的输入内容进行存储。将内容存储到oldValue中。
javascriptlet oldValue = ""; el.addEventListener('input', (e) => { if (e.data && !/^\-?\d*\.?\d*$/.test(el.value)) { el.value = oldValue; } oldValue = el.value; }); -
判断输入框的文本是不是实数,如果是,就使用旧值进行赋值。
javascriptconst vInput = { mounted(el, binding, vnode) { if (vnode.type != "input") { return; } let oldValue = ""; el.addEventListener('input', (e) => { if (e.data && !/^\-?\d*\.?\d*$/.test(el.value)) { el.value = oldValue; } oldValue = el.value; }); } }; -
全部代码
javascript<template> <input v-input ref="inputRef"> </template> <script setup> const vInput = { mounted(el, binding, vnode) { if (vnode.type != "input") { return; } let oldValue = ""; el.addEventListener('input', (e) => { if (e.data && !/^\-?\d*\.?\d*$/.test(el.value)) { el.value = oldValue; } oldValue = el.value; }); } }; </script>
编写vue的输入框的自定义指令研究
姚*鸿的博客2024-09-08 13:33
相关推荐
毕业设计7033 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)xifangge20253 小时前
AGENTS.md 怎么写?涵盖 Java、Python、Vue、Go 的 8 套开箱即用模板几何心凉3 小时前
没有万能模型:我用 AiiOnly Token Plan,把多款大模型的长处拼进同一个项目kyriewen3 小时前
Claude Code 的额度今天缩水了17%——官方公告上写的是"永久提高25%"雪芽蓝域zzs4 小时前
vue解构平铺VS对象包裹风骏时光牛马4 小时前
从零到实战,完整AI学习路线三十而立洋5 小时前
深入理解 Monorepo:子包安装依赖IT_陈寒5 小时前
Java Stream处理大集合,我的内存怎么就炸了Captaincc5 小时前
AI 用量桌面端-桌面宠物自定义指南OpenTiny社区6 小时前
码力全开,智启前端新生态|OpenTiny 登陆华为全联接大会2026