vue2项目封装了指令,输入框只能输入正浮点数,现在需要在此代码基础上修改下,支持输入正浮点数和负浮点数。
源码如下:
export default { bind(el, binding, vnode) { const input = el.querySelector(".el-input__inner") || el.querySelector(".el-textarea__inner") || el; input.addEventListener("compositionstart", () => { vnode.locking = true; // 解决中文输入双向绑定失效 }); input.addEventListener("compositionend", () => { vnode.locking = false; // 解决中文输入双向绑定失效 input.dispatchEvent(new Event("input")); }); // 输入监听处理 input.onkeyup = () => { if (vnode.locking) { return; } // v-input.float if (binding.modifiers.float) { // 只能输入浮点型(只能一个小数点) onlyFloat(input, binding.value); } input.dispatchEvent(new Event("input")); }; // 浮点数 function onlyFloat(input, n) { let value = input.value; value = value.replace(/[^\d.]/g, ""); value = value.replace(/^\./g, ""); value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); if (n && Number(n) > 0) { // 限制n位 var d = new Array(Number(n)).fill("\\d").join(""); var reg = new RegExp(`^(\\-)*(\\d+)\\.(${d}).*$`, "ig"); value = value.replace(reg, "$1$2.$3"); } if (value && !value.includes(".")) { value = Number(value).toString(); // 去掉开头多个0 } input.value = value; } }}
function onlyFloat(input, decimalPlaces) { let val = input.value; if (val.startsWith('-')) { val = '-' + val.slice(1).replace(/-/g, ''); } // 只允许一个小数点 val = val.replace(/^\./g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.'); // 限制小数点后的位数 if (decimalPlaces !== undefined && !isNaN(decimalPlaces)) { const parts = val.split('.'); if (parts[1] && parts[1].length > decimalPlaces) { parts[1] = parts[1].substring(0, decimalPlaces); val = parts.join('.'); } } val = val.replace(/[^\d.-]/g, ''); input.value = val;}
每次点击都要获取最新的goodsId,当前这个写法只能获取初始的goodsId: 100,自定义指令无法获取到goodsId的最新值。 尝试过的方法: 1、在updated内再一次获取最新值,但是每次点击,事件会触发多次。 2、在vnode上获取最新值,同样无法获取到最新值。 在此想请教一下各位
创建自定义指令 第一步,创建一个自定义命令类文件,新建application/common/command/Hello.php <?php namespace app\common\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\con
自定义指令可以使用 macro 指令来定义, 这是模板设计者所关心的内容。 Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义, 这时可以使用 freemarker.template.TemplateDirectiveModel 类来扩展 (请参考 后续章节)。 基本内容 宏是有一个变量名的模板片段。可以在模板中使用宏作为自定义指令, 这样就能进行重复性的工作。例如,创建
主要内容:实例,实例,钩子,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> // 注册一个全局自定义指令 v-focus Vue.d
主要内容:实例,实例,钩子,实例,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> const app = Vue.createApp({}
简介 除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令。注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令。下面这个例子将聚焦一个 input 元素,像这样: Vue.directive('focus', { inserted: function (el)