angular 用指令实现一个文本框只能输入数字

1、建立一个独立模块用于作为公用指令的模块

 1)生成模块

ng g m directive

2)进入指令模块目录

cd directive

3)生成一个只能输入数字的指令类

ng g d numberinput    

4)指令模块directive.module.ts代码如下:

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NumberinputDirective } from './numberinput.directive';

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [NumberinputDirective],
  exports:[ // 使引用该模块的类可以使用该指令
    NumberinputDirective
  ]
})
export class DirectiveModule { }

5)指令类numberinput.directive.ts代码如下:

import { Directive, Attribute, ElementRef } from '@angular/core';
import { HostListener,Input } from '@angular/core';

@Directive({
  selector: '[att-numberonly]'
})
export class NumberinputDirective {

  constructor(element:ElementRef) {
  }

   @HostListener('keydown', ['$event']) onKeyDown(event) {
    let e = <KeyboardEvent> event;
      if ([46, 8, 9, 27, 13, 110, 190].indexOf(e.keyCode) !== -1 ||
        // 允许全选: Ctrl+A 
        (e.keyCode === 65 && (e.ctrlKey || e.metaKey)) ||
        // 允许复制: Ctrl+C
        (e.keyCode === 67 && (e.ctrlKey || e.metaKey)) ||
        // 允许粘贴: Ctrl+V
        (e.keyCode === 86 && (e.ctrlKey || e.metaKey)) ||
        // 允许剪切: Ctrl+X
        (e.keyCode === 88 && (e.ctrlKey || e.metaKey)) ||
        // 允许: home(头), end(尾), left(左移), right(右移)
        (e.keyCode >= 35 && e.keyCode <= 39)) {
          // let it happen, don't do anything
          return;
        }
        // 确保数字以外的案件被拒绝执行默认动作
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
      
  }

}

6)指令的适应

<1>使用模块引入该指令模块

@NgModule({
  imports: [
    CommonModule,
    DirectiveModule
  ]

<2>文本框中引入该指令属性

<nz-input formControlName="sdrugprice" att-numberonly [nzSize]="'large'" [nzPlaceHolder]="'零售价格(元)'"></nz-input>

★ 学习本文需要掌握angular 相关知识,后续将会陆续写一些angular入手到提高的文章。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值