[英]I an trying to disable and enable checkbox based on value in angular 8
这是我的代码
我有类似的列表数组:这是getCall。 ktsessions = [ {"presenter":"Bharath","topic":"Angular","status":"scheduled","emailId":"bharathkumar@gmail.com"}, {"presenter":"Sayyad", "topic":"Angular","status":"organized","emailId":"raheemsayyad@gmail.com"},{"presenter":"Kanchan","topic":"APS","status": "预定","emailId":"kanchanubey@gmail.com"} ];
<tr *ngFor = "let ktsession of ktsessions >
<td ><input type="checkbox" [disabled]='disabled'></td>
</tr>
TS代码:
getktsession(){
this.service.getKtsession().subscribe(data =>{
console.log('get', data);
this.ktsessions = data;
this.ktsessions.find(user => {
if(user.presenter ==="Kanchan"){
this.disabled = true
} else {
this.disabled = false;
}
});
});
}
这里有几个问题。
<tr *ngFor = "let ktsession of ktsessions >
- ktsessions
后缺少结束引号<td ><input type="checkbox" [disabled]='disabled'></td>
- [disabled]='disabled'
应该是[disabled]="ktsession.disabled"
。 每个复选框实例都需要有自己的disabled
属性。 [disabled]='disabled'
将每个复选框的disabled
属性设置为组件类实例的disabled
属性,而不是复选框实例。this.ktsessions.find(user => {
- Array#find不是在这里使用的合适方法,即使它碰巧可以工作,因为您没有从回调函数返回任何内容,因此它将迭代整个数组。数组#find 用于在数组中搜索与指定条件匹配的元素并返回该元素,而不是用于迭代数组并在每个元素上设置属性,这就是您在这里所做的。Array#forEach是适当的方法那。this.disabled = true
和this.disabled = false
- 这些是在组件类实例上设置disabled
属性(这是this
所指的),但是您需要做的是在每个user
实例上设置disabled
属性user.disabled = true
或user.disabled = false
。所以你的模板应该是这样的:
<tr *ngFor="let ktsession of ktsessions">
<td>
<input type="checkbox" [disabled]="ktsession.disabled" /> <!-- reference "ktsession.disabled" instead of "disabled" -->
{{ ktsession.presenter }}
</td>
</tr>
你的subscribe
应该是这样的:
this.getKtsession().subscribe((data) => {
this.ktsessions = data;
this.ktsessions.forEach((user) => { // <-- use forEach, not find
if (user.presenter === 'Kanchan') {
user.disabled = true; // <------------ set user.disabled, not this.disabled
} else {
user.disabled = false; // <----------- set user.disabled, not this.disabled
}
});
});
这是一个 StackBlitz展示它如何处理这些变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.