【问题标题】:Angular2 typing pattern directiveAngular2 打字模式指令
【发布时间】:2017-03-13 19:30:12
【问题描述】:

我正在寻找一个可以添加到输入的指令(因此使用 ngModel),它可以防止键入或粘贴任何与给定模式不匹配的字符串。

我确实设法通过在keypress 中更新模型来编写,但我不知道如何处理复制和粘贴的事情。

这是我到目前为止所写的:

import { Directive, Input, HostListener, EventEmitter } from "@angular/core"


@Directive({
  selector: '[ngModel][typingPattern]'
})

export class TypingPatternDirective  {

  @Input() typingPattern: string
  @Input() ngModel
  @Output() ngModelChange = new EventEmitter()
  private oldValue: any

  /* On key down, we record the old value */
  @HostListener('keydown', ['$event'])
  onKeyDown($event) {
    this.oldValue = $event.target.value
    if($event.keyCode === 32) { // Prevent space key
        $event.preventDefault()
    }
  }

  /* On changing value, we check if the max length is reached. If not, we do nothing, otherwise we put the old value */
  @HostListener('keypress', ['$event'])
  onKeypress($event) {
    if ( !$event.target.value.match( new RegExp(this.typingPattern))) {
      $event.target.value = this.oldValue.trim()
      this.ngModelChange.emit($event.target.value)
    }
  }

}

正如我所提到的,这不涉及复制和粘贴。我想始终在 input 元素上使用此指令(因此我想确保它确实更新了 InputComponent 错误状态,但现在不是这种情况)。

【问题讨论】:

  • @HostListener('onpaste', ['$event']) {...}

标签: angular typescript


【解决方案1】:

尝试使用npm install angular2-text-mask,我认为它适合您的需求。

【讨论】:

猜你喜欢
  • 2016-06-25
  • 2017-07-22
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2017-09-02
  • 1970-01-01
相关资源
最近更新 更多