2016-10-30 4 views
0

ディレクティブを使用して非数値キーをブロックするには、これが最良の2ウェイですか?私は、これは、ユーザがNUMだけを入力できるようにするために使用していますブロック2の数字以外のディレクティブをブロックする

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

@Directive({ 
    selector: '[blockNonNumber]' 
}) 

export class blockNonNumberDirective { 

    @HostListener('keydown', ['$event']) onKeyDown(event: any) { 
     let keyCode = [8, 9, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110]; 
     if (keyCode.indexOf(event.which) === -1) event.preventDefault(); 
    } 
} 
+0

理由 '[]'のセレクタはいかがですか? –

+2

あなたはHTMLでそれを達成することができます '' –

+1

minとstep属性は数字以外の数字を防ぐものではありません –

答えて

2

export class blockNonNumberDirective { 
    constructor() { } 

    @HostListener('keypress') onkeypress(e){ 
    let event = e || window.event; 
    if(event){ 
     return this.isNumberKey(event); 
    } 
    } 

    isNumberKey(event){ 
    let charCode = (event.which) ? event.which : event.keyCode; 
    if (charCode > 31 && (charCode < 48 || charCode > 57)){ 
     return false; 
    } 
    return true; 
    } 
} 
1

は、私は、テキストマスクコンポーネントを使用することをお勧めします。それは非常に便利です。

``typescript 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { TextMaskModule } from 'angular2-text-mask'; 

@NgModule({ 
    imports: [ 
    FormsModule, 
    TextMaskModule 
    ], 
    declarations: [] 
}) 
export class MyModule {} 
``` 

Then, use it in your component: 
```typescript 
@Component({ 
    selector: 'app', 
    template: ` 
    <input [textMask]="{mask: mask}" [(ngModel)]="myModel" type="text"/> 
    ` 
}) 
export class AppComponent { 
    public myModel = '' 
    public mask = ['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/] 
} 
``` 

text-mask

関連する問題