[关闭]
@Wangww0925 2020-08-11T01:32:47.000000Z 字数 1234 阅读 327

Vue 自定义指令【限制数字输入】

Vue


main.js

  1. /**
  2. * v-text-only="{
  3. * textType: '', // 需要限制是什么文本类型:num:限制只能是数字;double:限制只能是小数;regExp:限制根据自定义的正则表达式的规则来写
  4. * doublePointNum: '', // 在textType是double类型下有效。表示限制小数点后有几位数
  5. * regExp: '', // 在textType是regExp类型下有效。表示自定义的正则表达式的规则
  6. * }"
  7. */
  8. Vue.directive('textOnly', {
  9. bind: function (el, binding) {
  10. el.handler = function (e) {
  11. switch (binding.value.textType) {
  12. case 'num':
  13. // 数字类型
  14. e.target.value = e.target.value.replace(/\D+/, '');
  15. break;
  16. case 'double':
  17. let regexp = '^\\d*(\\.?\\d{0,{{doublePointNum}}})'.replace(/{{doublePointNum}}/g, binding.value.doublePointNum || 2);
  18. e.target.value = (e.target.value.match(new RegExp(regexp, 'g'))[0]) || '';
  19. break;
  20. case 'regExp':
  21. e.target.value = (e.target.value.match(new RegExp(binding.value.regExp, 'g'))[0]) || '';
  22. break;
  23. }
  24. e.target.dispatchEvent(new Event("input")); //调用input事件使vue v-model绑定更新,下面相同
  25. };
  26. el.addEventListener('keyup', el.handler);
  27. }
  28. });

.vue文件
自定义指令限制为数字:

  1. <Input style="width: 250px;" type="text" v-text-only="{textType:'num'}" />

自定义指令限制为2位小数:

  1. <Input style="width: 250px;" type="text" v-text-only="{textType:'double'}" />

自定义指令限制为3位小数:

  1. <Input style="width: 250px;" type="text" v-text-only="{textType:'double', doublePointNum:'3'}" />

自定义指令是根据正则表达式:

  1. <Input style="width: 250px;" type="text" v-text-only="{textType:'regExp', regExp:'^\\d*(\\.?\\d{0,2})'}" />
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注