Angular 需要角度指令——文本框中的数字和/或两位小数

Angular 需要角度指令——文本框中的数字和/或两位小数,angular,Angular,我只想在文本框中输入数字。一个数字或两个小数的数字。 例如,12345或1234.56 我在网上找到了一些代码,但现在找不到资源。那只对一个数字有效,但对两个小数无效。我想修改代码。给你 currencyChars = new RegExp('[\.,]', 'g'); // we're going to remove commas and dots constructor(public element: ElementRef, public renderer: Renderer2, priv

我只想在文本框中输入数字。一个数字或两个小数的数字。 例如,
12345
1234.56

我在网上找到了一些代码,但现在找不到资源。那只对一个数字有效,但对两个小数无效。我想修改代码。给你

 currencyChars = new RegExp('[\.,]', 'g'); // we're going to remove commas and dots
constructor(public element: ElementRef, public renderer: Renderer2, private decimalPipe: 
DecimalPipe) {}

ngOnInit() {
 this.format(this.element.nativeElement.value);
}

@HostListener('input', ["$event.target.value"]) onInput(e: string) {
  this.format(e);
}

 format(val: string) {
    const numberFormat = parseInt(String(val).replace(this.currencyChars, ''));
    const usdollar = this.decimalPipe.transform(numberFormat, '1.0', 'en-US');
    this.render.setProperty(this.element.nativeElement, 'value', usdollar);
 }

我想我必须改变格式方法。请提供帮助。

能否尝试将参数更改为十进制管道

 ...
 const usdollar = this.decimalPipe.transform(numberFormat, '1.1-2', 'en-US');
 ...

能否尝试将参数更改为十进制管道

 ...
 const usdollar = this.decimalPipe.transform(numberFormat, '1.1-2', 'en-US');
 ...

我们可以改进指令以考虑小数

我们得到改变@Input的可能小数

  decimales: string = "";
  @Input()
  set mask(value: string) {
    const i = value.indexOf("d{0,");
    if (i > 0) {
      const decimales = +value.substr(i + 4, 1);
      this.decimales = "000000000".substr(0, decimales);
    }
    this.regExpr = new RegExp(value);
  }
我们添加了一个@HostListener模糊

  @HostListener("blur", ["$event"])
  blur($event) {
    if (this.decimales) {
      let item = $event.target;
      let values = item.value.split(".");
      let value =
        values.length > 1
          ? values[0] + "." + (values[1] + this.decimales).substr(0, this.decimales.length)
          : values[0] + "."+this.decimales;
      this.control.control.setValue(value, { emit: false });
    }
  }

注意:代码仍然按“原样”提供,不提供任何形式的担保

我们可以改进指令以考虑小数

我们得到改变@Input的可能小数

  decimales: string = "";
  @Input()
  set mask(value: string) {
    const i = value.indexOf("d{0,");
    if (i > 0) {
      const decimales = +value.substr(i + 4, 1);
      this.decimales = "000000000".substr(0, decimales);
    }
    this.regExpr = new RegExp(value);
  }
我们添加了一个@HostListener模糊

  @HostListener("blur", ["$event"])
  blur($event) {
    if (this.decimales) {
      let item = $event.target;
      let values = item.value.split(".");
      let value =
        values.length > 1
          ? values[0] + "." + (values[1] + this.decimales).substr(0, this.decimales.length)
          : values[0] + "."+this.decimales;
      this.control.control.setValue(value, { emit: false });
    }
  }


注:代码按“原样”提供,不提供任何形式的担保

需要多少小数点?需要多少小数点?