Ich versuche, eine inputNumber
Direktive zu machen, die Eingabe verhindert (nicht die Eingabe hervorheben, wenn Wert falsch ist, aber sogar Eingabe in falschen Wert) : nur auf [0-9] b) bezüglichAngular 4 Eingang [Typ = 'Nummer'] verhindern Eingabe über Min/Max
a) Buchstaben und Symbole, und beschränken min
max
params c) werden im Verhältnis mit anderen Richtlinien, in der Ansicht über greaterOrEqual
/lessOrEqual
Eigenschaften.
Das ist mein input-number.directive.ts
:
import {Directive, HostListener, Input} from '@angular/core';
@Directive({
selector: '[inputNumber]'
})
export class InputNumberDirective {
@Input() min: number = 0; // will be input
@Input() max: number = 100; // will be input
@Input() greaterOrEqual: number = 23; // will be input
@Input() lessOrEqual: number = 77; // will be input
@HostListener('keypress', ['$event']) sanitizeValue(event: KeyboardEvent): boolean {
const targetVal: number = Number((<HTMLInputElement>event.target).value);
if (event.charCode >= 48 && event.charCode < 58) {
if (this.min !== null && targetVal < this.min) {
return false;
}
if (this.max !== null && targetVal > this.max) {
return false;
}
if (this.greaterOrEqual !== null && targetVal < this.greaterOrEqual) {
return false;
}
return !(this.lessOrEqual !== null && targetVal > this.lessOrEqual);
}
return false;
}
}
Das alles funktioniert in Bezug auf die Verhinderung von Buchstaben/Symbole eingeben, aber wenn es zu respektieren Zahlen kommt Begrenzer Benutzer noch in der Lage ist, sie über und mein Ziel zu geben, dies zu verhindern . Ich habe einige SO-Threads (z. B. Don't allow typing numbers between max and min value) gefunden, aber es hat mir nicht viel geholfen.
Wäre es nicht einfacher, einen eigenen Validator zu schreiben? –
Validator verhindert nicht die Eingabe falscher Werte – markoffden
Aber könnte die Übermittlung eines Formulars verhindern –