gpt4 book ai didi

angular - 如何格式化 Angular 数字输入

转载 作者:太空狗 更新时间:2023-10-29 19:35:57 24 4
gpt4 key购买 nike

我有这样一个数字输入 enter image description here

我想要这样的东西(不管分离器是什么)

enter image description here

我的实际代码如下:

<div class="row center-xs" *ngFor="let item of listItem;let i=index">
<div class="col-xs-12 col-md-10">
<mat-form-field>
<input [disabled]="item.lock!=0" type="number" matInput [placeholder]="item.name" [(ngModel)]="item.concept" >
</mat-form-field>
</div>
</div>

我怎样才能做到这一点?

最佳答案

我遇到了类似的问题。为了解决这个问题,我使用了这个 article .我创建了一个略微修改的版本以满足我的需要。

import { Directive, ElementRef, forwardRef, HostListener, Input, OnDestroy } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material';
import { Subscription } from 'rxjs';
import { formatNumber } from '@angular/common';

@Directive({
selector: 'input[localizedNumericInput]',
providers: [
{ provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: LocalizedNumericInputDirective },
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => LocalizedNumericInputDirective),
multi: true
}
]
})
export class LocalizedNumericInputDirective implements ControlValueAccessor, OnDestroy {
locale = 'en';
decimalMarker: string;

constructor(private element: ElementRef<HTMLInputElement>) {
}

private _value: string | null;

get value(): string | null {
return this._value;
}

@Input('value')
set value(value: string | null) {
this._value = value;
this.formatValue(value);
}

@HostListener('input', ['$event.target.value'])
input(value) {
//Find all numerics, decimal marker(, or .) and -
//It will delete thousandSeparator cos it's always opposite to decimal marker
const regExp = new RegExp(`[^\\d${this.decimalMarker}-]`, 'g');
//Separate value on before and after decimal marker
const [integer, decimal] = value.replace(regExp, '').split(this.decimalMarker);

//Send non localized value, with dot as decimalMarker to API
this._value = decimal ? integer.concat('.', decimal) : integer;

// If decimal separator is last character don't update
// because it will delete . || ,
if (this.isLastCharacterDecimalSeparator(value)) {
this._value = value;
}

// here to notify Angular Validators
this._onChange(this._value);
}

@HostListener('blur')
_onBlur() {
/**
* Adding thousand separators
*/
this.formatValue(this._value);
}

@HostListener('focus')
onFocus() {
this.unFormatValue();
}

_onChange(value: any): void {}

/**
* @param value
* apply formatting on value assignment
*/
writeValue(value: any) {
this._value = value;
this.formatValue(this._value);
}

registerOnChange(fn: (value: any) => void) {
this._onChange = fn;
}

registerOnTouched() {}

isLastCharacterDecimalSeparator(value: any) {
return isNaN(value[value.length - 1]);
}


private formatValue(value: string | null) {
if (value === null) {
this.element.nativeElement.value = '';
return;
}

if (this.isLastCharacterDecimalSeparator(value)) {
this.element.nativeElement.value = value;
return;
}

// Conclude the decimal and thousand separators from locale
const [thousandSeparator, decimalMarker] = formatNumber(1000.99, this.locale).replace(/\d/g, '');
this.decimalMarker = decimalMarker;

//Here value should always come with . as decimal marker thus any other behavior is bug
const [integer, decimal] = value.split('.');

//Group every three elements, and add thousandSeparator after them
this.element.nativeElement.value = integer.replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

//Add decimals and decimalMarker if any
if (decimal) {
this.element.nativeElement.value = this.element.nativeElement.value.concat(decimalMarker, decimal);
}
}

private unFormatValue() {
const value = this.element.nativeElement.value;
if (this.isLastCharacterDecimalSeparator(value)) {
return;
}
const regExp = new RegExp(`[^\\d${this.decimalMarker}-]`, 'g');
const [integer, decimal] = value.replace(regExp, '').split(this.decimalMarker);

this._value = integer.concat('.', decimal);
if (value) {
this.element.nativeElement.value = this._value;
} else {
this.element.nativeElement.value = '';
}
}
}

关于angular - 如何格式化 Angular 数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com