【发布时间】:2019-04-30 09:03:42
【问题描述】:
当我点击材质复选框(mat-checkbox)时,如何将布尔值(true false)更改为字符串。
我有一个输入 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>
但我希望棱角材料能够正常工作。我将不胜感激任何帮助。谢谢。
【问题讨论】:
-
我尝试使用材料复选框,它没有更改为字符串
-
是的。我只是将输入更改为 mat 复选框。我将把代码放在 5 10 分钟内
-
使用更改事件并根据选中的属性切换值
-
你想为
Agreement复选框添加必需的验证器吗?如果选中则登录,否则禁用登录按钮? -
本协议不需要