最近在写一个表单,有些输入框只能输入数字,单又不想每次写表单的时候,都要去验证输入的是不是数字,

那么就想到直接限制只能输入数字,通过指令实现

这里需要注意的是,不只更改DOM的值,如果input为数据绑定的值,需要更新绑定值,

所以需要引入NgModel,通过viewToModelUpdate,来更新绑定值


import { Directive } from '@angular/core';
import { NgModel } from '@angular/forms'; // 自定义指令
@Directive({
selector: 'input[number]',
host: {
'(keypress)': 'onkeypress($event)',
'(keyup)': 'onkeyup($event)'
},
inputs: ['maxValue'],
}) export class NumberInput {
maxValue: number; constructor(public control: NgModel) {
} onkeyup(event) {
let input = event.target;
if (input.value == "") {
input.value = 0;
this.control.viewToModelUpdate(0);
}
let newValue = parseInt(input.value);
if (newValue > this.maxValue) {
input.value = this.maxValue;
this.control.viewToModelUpdate(this.maxValue);
}
else
{
input.value = newValue;
this.control.viewToModelUpdate(newValue);
} } onkeypress(event) {
// 判断是否为数字
let inputStr = String.fromCharCode(event.keyCode);
if (!parseInt(inputStr)) {
return false;
}
} }

引用方式:

import {
NumberInput
} from './directives'; @NgModule({
declarations: [
NumberInput
],
imports: [
],
providers: [
],
exports: [
]
})

html代码

<input type="number" NumberInput />

最新文章

  1. Linux系统中Xampp+Bugfree安装
  2. mosquitto_pub和mosquitto_sub 命令参数说明
  3. Android+PHP服务器+MySQL实现安卓端的登录
  4. 查询局域网内在线电脑IP
  5. [Java Basics] Collection
  6. Linux Shell脚本攻略 读书笔记
  7. 第四篇:R语言数据可视化之折线图、堆积图、堆积面积图
  8. Python-方法重载的问题
  9. 《Windows游戏编程技巧大师》就DirectDraw而创建DirectDraw知识笔记
  10. MVC 框架
  11. 计算机网路中CDP,LLDP,STP的详解
  12. P3327 [SDOI2015]约数个数和
  13. ionic2一个需求模块的文件该是这样子的
  14. python读取指定字节长度的文本
  15. layer弹窗插件自带自写经验
  16. Redis源码研究—基础知识
  17. Go 示例测试实现原理剖析
  18. java算法 蓝桥杯 文化之旅
  19. JavaScript 匹配字符串偶数位置的字符 及匹配 $ 符号
  20. 28. LAST() 函数

热门文章

  1. Vue.js-this详解
  2. 【Python图像特征的音乐序列生成】关于数据库到底在哪里下载
  3. Mongodb之failed to create service entry worker thread
  4. vue2使用animate css
  5. DROP LANGUAGE - 删除一个过程语言
  6. python之函数默认参数的坑
  7. linux - centos7 开放防火墙端口的新方式
  8. 主成分分析法(PCA)答疑
  9. linux简单常用命令
  10. cocos2dx 通过jni调用安卓底层方法