angular - mat-checkbox 在未定义时禁用
问题描述
我想相互锁定的复选框
<div>
<mat-checkbox color="primary" [(ngModel)]="data.timer.onSunrise"
[(disabled)]="data.timer.onDisable || data.timer.onSunset || data.timer.offSunrise"><h4>bei Sonnenaufgang</h4></mat-checkbox>
<mat-checkbox color="primary" [(ngModel)]="data.timer.onSunset"
[(disabled)]="data.timer.onDisable || data.timer.onSunrise || data.timer.offSunset"><h4>bei Sonnenuntergang</h4></mat-checkbox>
</div>
<div>
<mat-checkbox color="primary" [(ngModel)]="data.timer.offSunrise"
[(disabled)]="data.timer.offDisable || data.timer.offSunset || data.timer.onSunrise"><h4>bei Sonnenaufgang</h4></mat-checkbox>
<mat-checkbox color="primary" [(ngModel)]="data.timer.offSunset"
[(disabled)]="data.timer.offDisable || data.timer.offSunrise || data.timer.onSunset"><h4>bei Sonnenuntergang</h4></mat-checkbox>
</div>
当我使用 DB 中的一些值打开对话框时...(console.log() 显示例如 onSunset 未定义)复选框被禁用,即使 onSunset 没有值(未定义)
当我将指令从 [()] 更改为 () 时,它可以工作。它不再被禁用。但是..这是一种方式!没有锁定功能了
<div>
<mat-checkbox color="primary" [(ngModel)]="data.timer.onSunrise"
(disabled)="data.timer.onDisable || data.timer.onSunset || data.timer.offSunrise"><h4>bei
Sonnenaufgang</h4></mat-checkbox>
<mat-checkbox color="primary" [(ngModel)]="data.timer.onSunset"
(disabled)="data.timer.onDisable || data.timer.onSunrise || data.timer.offSunset"><h4>bei
Sonnenuntergang</h4></mat-checkbox>
</div>
解决方案
我看到您使用disabled
具有两种方式绑定的角度属性。它不会作为双向绑定工作。diabled
是一个输入属性,它不会工作[(ngModel)]
注释。对于您的具体情况,我建议将逻辑放入控制器并在那里定义禁用逻辑。例如
在 component.html 中:
<div>
<mat-checkbox color="primary" [(ngModel)]="data.timer.onSunrise"
(disabled)="(disabled)="disableCheckBoxes(onSunrise.value,onSunset.value)" #onSunrise><h4>bei
Sonnenaufgang</h4></mat-checkbox>
<mat-checkbox color="primary" [(ngModel)]="data.timer.onSunset"
(disabled)="disableCheckBoxes(onSunrise.value,onSunset.value)" #onSunset><h4>bei
Sonnenuntergang</h4></mat-checkbox>
</div>
在 component.ts 中:
disableCheckBoxes(onSunrise?:any,onSunset?:any){
if(onSunrise.value){
return true;
} else if(onSunset.value) {
return true;
}
}
同样,您可以处理控制器中的逻辑并通过click
事件特定场景等事件返回结果。
同样,您可以使用访问 HTML 元素正在使用 Angulars ElementRef
。您可以在此处阅读更多相关信息。
另一种方法是使用 Angulars 反应式表单方法 请在此处找到反应式表单的参考
推荐阅读
- c# - DataTrigger 未设置不透明度
- node.js - FFMPEG-mergedVideo 两个视频出现错误
- database - 我想从 wordpress 数据库中获取数据
- angularjs - 如何在 ui-grid 中应用排序?
- python - Tensorflow:缩放权重以适应新模型
- javascript - 搜索时如何调用后端函数?
- python-3.x - 使用 Python 在我的 Mac 上打开文件,权限被拒绝
- python - python- .py 文件中的 Kivy 屏幕管理器
- node.js - Node.js UnhandledPromiseRejectionWarning:错误:发送后无法设置标头
- performancecounter - PerformanceCounter 如何计算与 IIS 网站的当前连接数?