我们在网页上有一个输入字段,必须在用户输入该数据的同时进行修剪。由于输入绑定到 Angular 表单,因此表单中的值也必须被修剪。我使用 Angular 7
import {
Directive,
ElementRef,
forwardRef,
HostListener,
Input,
Renderer2
} from "@angular/core";
import {
ControlValueAccessor,
NG_VALUE_ACCESSOR
} from "@angular/forms";
@Directive({
selector: "[ebppInputTextTrimmer]",
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputTextTrimmerDirective),
multi: true
}]
})
export class InputTextTrimmerDirective implements ControlValueAccessor {
@Input() prevVal: string;
@Input() isTrimEnabled: boolean;
onChange = (_: any) => {
}
onTouched = () => {
}
constructor(
private _renderer: Renderer2,
private _elementRef: ElementRef) {
}
writeValue(value: any): void {
const normalizedValue = value == null ? "" : value;
this._renderer.setProperty(this._elementRef.nativeElement, "value", normalizedValue);
}
registerOnChange(fn: (_: any) => void): void {
this.onChange = fn;
}
registerOnTouched(fn: () => void): void {
this.onTouched = fn;
}
setDisabledState(isDisabled: boolean): void {
this._renderer.setProperty(this._elementRef.nativeElement, "disabled", isDisabled);
}
@HostListener("input", ["$event.target.value"])
handleInput(inputValue: any): void {
let valueToProcess = inputValue;
if (this.isTrimEnabled) {
valueToProcess = inputValue.trim();
}
this.onChange(valueToProcess);
// set the value that is trimmed in the view
this._renderer.setProperty(this._elementRef.nativeElement, "value", valueToProcess);
}
}
显示的代码对我来说很好。我想知道是否有更简单的解决方案。