angular - 将校验值设置为反值
问题描述
我将复选框列表绑定到一个对象,如下所示:
<div class="column-option" *ngFor="let col of columnState; index as i;">
<mat-checkbox class="example-margin" [(ngModel)]="!columnState[i].hide">{{col.colId}}</mat-checkbox>
</div>
这显示得很好,但是在选中复选框时,它不会反转布尔值。
如果我更改[(ngModel)]="!columnState[i].hide"
为,[(ngModel)]="columnState[i].hide"
则模型会更新,但我希望hide=false
勾选复选框的逻辑。
如何反转显示的选中值,以便当有人取消选中该模型的复选框时hide=true
?
编辑:
复选框(https://material.angular.io/components/checkbox/overview)的文档说:
当用户单击 mat-checkbox 时,默认行为是切换选中值并将不确定设置为 false。可以通过向复选框提供新值 MAT_CHECKBOX_CLICK_ACTION 来自定义此行为。
然后显示它被设置为一个数组,但它没有显示如何实际注入这个令人困惑的值。我尝试绑定,(click)
但没有成功。看来我需要通过注入禁用默认点击处理程序,这样我的点击处理程序才能工作。
如何设置自定义点击操作以便反转值?
解决方案
答案是将文档中的值注入到组件装饰器中:
@Component({
selector: 'app-edit-columns',
templateUrl: './edit-columns.component.html',
styleUrls: ['./edit-columns.component.scss'],
providers: [
{provide: MAT_CHECKBOX_CLICK_ACTION, useValue: 'noop'}
]
})
noop
禁用默认点击,所以我可以制作这个方法:
toggleHiddenState(index: number)
{
this.columnState[index].hide = !this.columnState[index].hide;
}
然后像这样更新我的控件:
<div class="column-option" *ngFor="let col of columnState; index as i;">
<mat-checkbox (click)="toggleHiddenState(i)" class="example-margin" [(ngModel)]="!columnState[i].hide">{{col.colId}}</mat-checkbox>
</div>
推荐阅读
- javascript - 制作可自定义的键盘快捷键 chrome 扩展
- unity3d - Unity - 为新创建的游戏对象提供参数
- javascript - Electron 自定义 `window.prompt()` (自定义,因为不支持提示)
- objective-c - 突出显示带有发件人标签的按钮
- python - 来自函数的 TensorFlow 占位符
- python - 过滤 ID 相邻的 SQL 元素
- python - 无法将文本翻译成单元格内的其他语言或 pptx 中的某些表格
- bash - 当使用“WHENEVER SQLERROR EXIT 1”时,为什么 Sqlplus bash 脚本不返回 ORA-02291 完整性约束的错误?
- python - 基于两列标记数据
- java - Unirest 抛出类未找到异常