Я просто пытаюсь написать директиву, которая будет отображать значение, отличное от ngModel
, выполнив это:
this.model.valueAccessor.writeValue(maskedValue.result);
, но, похоже, она изменит фактическуюngModel
к значению, а не просто отображать значение.
import {
Input,
Directive,
AfterContentInit
} from '@angular/core';
import { NgModel } from '@angular/forms';
import { StringMask } from '@src/ngjs-src/core';
@Directive({
selector: '[mask]',
providers: [NgModel]
})
export class MaskDirective implements AfterContentInit {
@Input() public ngModel: string;
@Input() public maskType: string;
constructor(private model: NgModel) {
this.model = model;
}
public modelOptions: {};
public ngModelOptions: {} = { allowInvalid: true };
private mask: StringMask;
public ngAfterContentInit(): void {
this.mask = StringMask.GetStringMask(this.maskType);
this.model.valueChanges.subscribe(value => {
if (value) {
const maskedValue = this.mask.process(value);
this.model.valueAccessor.writeValue(maskedValue.result);
}
});
}
}
использование директивы:
<cb-input type="text"
name="accountNumber"
label="Account Number"
[required]="true"
mask
[maskType]="'BANK'"
[(ngModel)]="mappedItem.accountNumber">
</cb-input>
Как сделать так, чтобы компонент отображал maskedValue.result
, но не изменил фактическую ngModel на maskedValue.result
?