Как я могу изменить логическое значение (true false) на строку, когда я нажимаю флажок материала (mat-checkbox).
У меня есть пример для ввода https://stackblitz.com/edit/angular-ng-true-false. Так что я использую тот же код, но я изменил флажок ввода на флажок материала.Я включил материал модуля.
МОЙ КОД С МАТЕРИАЛЬНОЙ ПРОВЕРКОЙ
import {
Directive,
Input,
forwardRef,
HostListener,
ElementRef,
Renderer2
} from '@angular/core';
import {
ControlValueAccessor,
NG_VALUE_ACCESSOR,
NgControl
} from '@angular/forms';
@Directive({
selector: 'input[type="checkbox"][trueFalseValue]',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TrueFalseValueDirective),
multi: true
}
]
})
export class TrueFalseValueDirective implements ControlValueAccessor {
private propagateChange = (_: any) => { };
@Input() trueValue = true;
@Input() falseValue = false;
constructor(private elementRef: ElementRef, private renderer: Renderer2) { }
@HostListener('change', ['$event'])
onHostChange(ev) {
this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);
}
writeValue(obj: any): void {
if (obj === this.trueValue) {
this.renderer.setProperty(this.elementRef.nativeElement, 'checked', true);
} else {
this.renderer.setProperty(this.elementRef.nativeElement, 'checked', false);
}
}
registerOnChange(fn: any): void {
this.propagateChange = fn;
}
registerOnTouched(fn: any): void { }
setDisabledState?(isDisabled: boolean): void { }
}
import { Component, OnInit, Inject, Input, Output, EventEmitter } from '@angular/core';
import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';
@Component({
selector: 'app-agreements',
templateUrl: './agreements.component.html',
styleUrls: ['./agreements.component.scss']
})
export class AgreementsComponent implements OnInit {
myForm: FormGroup;
constructor( private fb: FormBuilder, ) {
}
ngOnInit() {
this.myForm = new FormGroup({
emailAgreement: new FormControl('Y'),
});
this.myForm = this.fb.group({
emailAgreement: ['']
});
}
}
<mat-checkbox class="checkbox-mat"
formControlName="emailAgreement" trueFalseValue trueValue="Y" falseValue="N">Agreement to be contacted</mat-checkbox>
Но я хочу, чтобы угловой материал работал.Буду признателен за любую помощь.Спасибо.