angular - 更改(更改)事件的布尔值
问题描述
我正在尝试使用布尔值来检测表单中的单选按钮是否已被选中。
(我为 HTML 和 TS 文件省略了不必要的代码)
HTML:
<mat-radio-button (change)="toggleEditable($event)" value="overdraft">Overdraft</mat-radio-button>
打字稿:
overdraft = false;
toggleEditable(event) {
if ( event.target.checked ) {
this.overdraft = true;
}
}
该事件未触发,因为当我尝试单击单选按钮并提交表单时,overdraft
未设置为 true。但是,如果我使用(click)
事件而不是(change)
,它可以正常工作,但是 (click)
事件的缺点是您必须双击单选按钮才能显示视觉选择,因此我觉得有必要使用(change)
(查看更多这里:mat-checkbox 不检查条件是否为假(仅在双击时)。
我该如何解决这个问题,以便当我单击单选按钮时,我的(change)
事件被触发并overdraft
设置为 true 而不使用(click)
UI 问题附带的 -events?
解决方案:
如果要获取 的实际值,mat-radio-button
则需要进行以下更改:
1) 不要[value]="overdraft"
在 HTML 中使用,而是使用value
不带方括号的方法,例如:
<mat-radio-button value="overdraft">Overdraft</mat-radio-button>
2) 在您的 TypeScript 代码中,您现在可以从 HTML 访问 value 属性:
valueChanged(event: MatRadioChange) {
console.log(event.value); //will log the value for the button you clicked
}
解决方案
您是否尝试过使用 ngModel?
它可能很简单:
<mat-radio-group [(ngModel)]="selectedValue" (change)="valueChanged($event)">
<mat-radio-button value="overdraft">Overdraft</mat-radio-button>
<mat-radio-button value="otherValue">Other</mat-radio-button>
</mat-radio-group>
在您的控制器中,您可以拥有:
valueChanged(event) {
this.overdraft = (event.value ==='overdraft');
}
推荐阅读
- django - 阻止 Django 在 admin 中自动填充多字段
- android - Android Studio 在 hello world 示例中使用 firebase 数据库崩溃
- java - 替换 switch 语句 Java
- python - Selenium Python 帮助获取表单元素
- c++ - Google Test 中测试类的构造函数
- laravel - Laravel MustVerifyEmail 不存在?
- sdn - 如何将数据包转发到 OpenDaylight 控制器
- c# - SendInput 鼠标点击 X/Y
- c# - Oauth token accessing
- javascript - 当 meta IE=edge 时从 c++/delphi 访问 javascript