Angular 8 - отображать другое значение на входе, чем ngModel - PullRequest
0 голосов
/ 08 ноября 2019

Я просто пытаюсь написать директиву, которая будет отображать значение, отличное от 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?

...