我的应用程序遇到问题。 我正在尝试创建一个复选框列表,单击复选框时,该值应为true,再次单击时,该值应为false。简单。
这是我的html
<li *ngFor="let checkbox of checkboxSelect">
<div class="checkbox-style">
<input type="checkbox" name ="{{checkbox.inputName}}"
[checked]="checkbox.name"
(change)="checkbox.name= !checkbox.name"/>
<div class="state">
<label>{{checkbox.label}}</label>
</div>
</div>
</li>
这是我的组件。
showFirstName = true;
showLastName = true;
checkboxSelect: any[] = [{
label: 'First name',
name: this.showFirstName,
inputName: 'showFirstName'
}, {
label: 'Last name',
name: this.showLastName,
inputName: 'showLastName'
},
];
一切正常,除了单击时我的“名称”值不会更改为true / false。
另一方面,当我将其直接放置到html而不带* ng的情况下
<li>
<div class="checkbox-style">
<input type="checkbox" name = "firstName"
[checked]="showFirstName"
(change)="showFirstName = !showFirstName"/>
<div class="state">
<label>First Name</label>
</div>
</div>
</li>
我不太清楚,我的目标是显示div取决于true / false
<div *ngIf="showFirstName" scope="col">First name</div>
<div *ngIf="showLastName" scope="col">Second name</div>
但是它完全没有改变。
有人知道我的代码有什么问题吗?
答案 0 :(得分:1)
根据您的评论,您尝试使用事件处理程序未修改的变量showFirstName
和showLastName
来显示/隐藏字符串First Name
和Last Name
。为了使值绑定在两个变量之间持久存在,可以使它们成为对象。通常,对象是通过Java引用通过 传递的。尝试以下
控制器
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
showFirstName = { status: true };
showLastName = { status: true };
checkboxSelect: any[] = [{
label: 'First name',
name: this.showFirstName,
inputName: 'showFirstName'
}, {
label: 'Last name',
name: this.showLastName,
inputName: 'showLastName'
}, ];
checkStatus() {
console.log(this.checkboxSelect[0].name, this.checkboxSelect[1].name);
}
}
模板
<li *ngFor="let checkbox of checkboxSelect">
<div class="checkbox-style">
<input type="checkbox" name="{{checkbox.inputName}}" [checked]="checkbox.name.status"
(change)="checkbox.name.status = !checkbox.name.status; checkStatus()" />
<div class="state">
<label>{{checkbox.label}}</label>
</div>
</div>
</li>
<table>
<th *ngIf="showFirstName.status" scope="col">First Name</th>
<th *ngIf="showLastName.status" scope="col">Last Name</th>
</table>
注意:使用对象引用来控制变量的状态在以后的开发中可能会很混乱。更好的方法是考虑不同的结构。
工作示例:Stackblitz
答案 1 :(得分:0)
将您的html更改为:-
<li *ngFor="let checkbox of checkboxSelect">
<div class="checkbox-style">
<input type="checkbox" [name] ="checkbox.inputName"
[checked]="checkbox.name"
(change)="checkbox.name = !checkbox.name"/>
<div class="state">
<label>{{checkbox.label}}</label>
</div>
</div>
</li>
答案 2 :(得分:0)
为什么不使用Angular ngModel?然后,您无需定义更改处理程序。
<li *ngFor="let checkbox of checkboxSelect">
<div class="checkbox-style">
<input type="checkbox" name ="{{checkbox.inputName}}"
[(ngModel)] ="checkbox.name"/>
<div class="state">
<label>{{checkbox.label}}</label>
</div>
</div>
</li>