Angular директива для чисел с десятичными знаками и поддержка копирования с клавиатуры - PullRequest
0 голосов
/ 12 апреля 2020
<input type="text" formControlName="reg_retail" appTwoDigitDecimaNumber/>

@Directive({
  selector: '[appTwoDigitDecimaNumber]'
})
export class TwoDigitDecimaNumberDirective {
  // Allow decimal numbers and negative values
  private regex: RegExp = new RegExp(/^\d*\.?\d{0,2}$/g);
  // Allow key codes for special events. Reflect :
  // Backspace, tab, end, home
  private specialKeys: Array<string> = [
    'Backspace',
    'Tab',
    'End',
    'Home',
    '-',
    'ArrowLeft',
    'ArrowRight',
    'Del',
    'Delete'
  ];

  constructor(private el: ElementRef) {}
  @HostListener('keydown', ['$event'])
  onKeyDown(event: KeyboardEvent) {
    // Allow Backspace, tab, end, and home keys
    if (this.specialKeys.indexOf(event.key) !== -1) {
      return;
    }
    let current: string = this.el.nativeElement.value;
    const position = this.el.nativeElement.selectionStart;
    const next: string = [
      current.slice(0, position),
      event.key == 'Decimal' ? '.' : event.key,
      current.slice(position)
    ].join('');
    if (next && !String(next).match(this.regex)) {
      event.preventDefault();
    }
  }
}

здесь, я использую относительную форму в этом контексте, ввод должен позволять копирование с клавиатуры, поддержка вставки также вместе с этим разрешают только 2 десятичных знака.

код работает нормально, как разрешает только 2 десятичных знака в ввод, но если я скопирую вставить значение, оно не работает

...