Angular - 防止在输入类型=“数字”中输入超出范围的数字

Posted

技术标签:

【中文标题】Angular - 防止在输入类型=“数字”中输入超出范围的数字【英文标题】:Angular - prevent entering number outside of range in input type="number" 【发布时间】:2021-12-09 23:33:12 【问题描述】:

在我的项目中,我有一个input type="number",用户应该在其中输入一个介于 1(总是)和另一个数字之间的数字。我想限制 UI 输入元素,这样只能输入该范围内的数字。到目前为止我的代码:

.html:

<p>Allowed values are 1 - max</p>
<input type="number" (input)="input($event)" />

.ts:

export class AppComponent 
  readonly max = 5;

  input(event: Event) 
    const inputElem = event.target as HTMLInputElement;
    if (+inputElem.value < 1) 
      inputElem.value = '1';
     else if (+inputElem.value > this.max) 
      inputElem.value = this.max.toString();
    
  

Stackblitz here

代码可以按我的意愿工作,但我想知道是否有 Angular 的方式来做到这一点,[(ngModel)][ngModel](ngModelChange)。我尝试了一些东西,但没有成功。

【问题讨论】:

【参考方案1】:

和这个another SO非常相似

  readonly max = 5;
  mynumber = 2;
  validateInput(e: any, input: any = null) 
    let value = +e;
    if (value < 1) value = 1;
    if (value > this.max) value = this.max;
    this.mynumber = value;
    if (input.value != value) 
      const start = input.selectionStart ? input.selectionStart - 1 : -1;
      input.value = value;
      if (start>=0) input.selectionStart = input.selectionEnd = start;
    
  

<input type="number" #input [ngModel]="mynumber" 
     (ngModelChange)="validateInput($event,input)" />

见stackblitz

【讨论】:

以上是关于Angular - 防止在输入类型=“数字”中输入超出范围的数字的主要内容,如果未能解决你的问题,请参考以下文章

防止表单输入类型=“数字”中的负输入?

如何使用 Angular 2 / Typescript 限制输入字段中的特殊字符

angular 2 dart中是不是有材料输入类型号

Angular 2使用getter和setter将输入表单值与模型绑定

Angular 2 / 如何防止 IE 触发自动输入验证?

ReactJs 防止输入类型号中的 e 和 dot