0
如何在輸入中顯示轉換後的值(例如「1(234)567-890」),還沒有轉換值('1234567890')?如何屏蔽自定義控件中的值
是否可以爲maskInputEl
和maskInput
分隔值?
我的模板:
<input #maskInputEl class="spacer" [type]="type"
[formControl]="maskInput"/>
和自定義組件:
export class MaskInputComponent implements ControlValueAccessor, OnInit, OnDestroy {
@ViewChild('maskInputEl') public maskInputEl: ElementRef;
@Input() public mask: any[];
public maskInput = new FormControl();
private _oldValue: string = '';
public ngOnInit(): void {
this.maskInput.valueChanges
.subscribe((value: string) => {
let valid = this.isValidValueByMask(value, this.mask);
if (valid) {
this._oldValue = value;
} else {
value = this._oldValue;
}
this._onChangeCallback(value);
this.onChange.emit(value);
this.maskInputEl.nativeElement.value = value;
},
(err) => console.warn(err)
);
}
public toggleActive(value) {
//
}
public registerOnChange(fn: any): void {
this._onChangeCallback = fn;
}
public registerOnTouched(fn: any): void {
this._onTouchedCallback = fn;
}
public _onChangeCallback: Function = (_: any) => {
//
}
public _onTouchedCallback: Function = (_: any) => {
//
}
public makeActive() {
this.maskInputEl.nativeElement.focus();
}
public writeValue(value: string): void {
this.maskInput.setValue(value);
}
public ngOnDestroy(): void {
//
}
private isValidValueByMask(value: string, mask: RegExp[]): boolean {
//
}
}
我需要相反的,用戶輸入清除數據和輸入轉換數據與掩碼 – Zverit
但你仍然存儲'清除數據'的權利?如果是這樣,那麼它就是用戶鍵入後的基本概念 - ,用格式化的值更新formField,但將實際值存儲在組件中。如果您僅將formField更新爲blur上的格式化值,則更容易實現 - 試圖在每個輸入事件上執行此操作似乎不能提供良好的用戶體驗 - 但是如果您嘗試提供輸入掩碼,那麼你沒有選擇,只能更新輸入事件的格式化值。如果遇到問題,我可以更新示例代碼 – snorkpete