我正在为这个问题奋斗第3天。我正在使用带有formControl的角度动态表单来绑定值并将创建的控件验证到表单。还包括:材料角度。
我有这个问题: 当我输入输入类型=数字时,即' 123。'它将值重置为空字符串。添加另一个数字" 123.3,值设置为123.30 - 这是正确的。
问题是用户设置值结束句点或逗号结尾,或者有多于1个逗号/句点,或者基本上是错误的。 Angular的验证不会运行 - 字段变空,值为'''因此,即使用户输入了一些输入,也没有任何消息,控件为空并且表单有效。 我发现我会阻止用户输入第二个句号/逗号,但是我无法阻止它,因为无法检查他是否已经使用逗号来表示' 123。'因为价值得到了''这太令人困惑了。
如果我改为type = text,一切正常。
根据我所研究的内容 - 这与Number Value Accessor有关。
writeValue(value: number): void {
// The value needs to be normalized for IE9, otherwise it is set to 'null' when null
const normalizedValue = value == null ? '' : value;
this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
}
registerOnChange(fn: (_: number|null) => void): void {
this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };
}
我试图用customValueAccessor覆盖它,但没有运气。 我也尝试使用inpt类型的文本,但我需要在手机上弹出一个数字键盘,即使使用pattern = \ d *也不能强制它,因为复杂的角度验证会让人发疯。
这是我的一些代码:
import { FieldConfig } from '../../interfaces/field-config.interface';
import { Field } from '../../interfaces/field.interface';
import { LabelFieldConfig } from '../../interfaces/label-field-config.interface';
import { TextFieldConfig } from '../../interfaces/text-field-config.interface';
@Component({
selector: 'form-input',
templateUrl: './form-input.component.html',
styleUrls: ['form-input.component.scss']
})
export class FormInputComponent implements Field, OnInit {
config: FieldConfig & LabelFieldConfig & TextFieldConfig;
group: FormGroup;
formControl: AbstractControl;
onBlur(): void {
let value = this.formControl.value;
value = this.config.format(value);
if (this.formControl.valid) {
this.formControl.setValue(value);
}
}
keyDown(event: any): void {
const { keyCode } = event;
if (!this.config.isValidKeyCode(keyCode)) {
event.preventDefault();
}
}
ngOnInit() {
this.formControl = this.group.controls[this.config.name];
}
}
有什么想法吗?非常感谢您的帮助。 或许你知道在文本输入上强制使用数字键盘的方法吗?这也会有所帮助。
如果您需要更多信息,我很乐意提供。 感谢