ngFor循环中的Angular 5复选框验证
我使用angular 5,在html文件中,我需要验证一个复选框,以确保用户至少选中一个复选框。我可以得到一个错误,但不是在我需要的方式。目前,使用下面的代码,我在每个复选框选项后都会收到一条错误消息,但我只需要在所有复选框后显示一条消息ngFor循环中的Angular 5复选框验证,angular,checkbox,angular5,Angular,Checkbox,Angular5,我使用angular 5,在html文件中,我需要验证一个复选框,以确保用户至少选中一个复选框。我可以得到一个错误,但不是在我需要的方式。目前,使用下面的代码,我在每个复选框选项后都会收到一条错误消息,但我只需要在所有复选框后显示一条消息 <div class="form-group"> <label for="options">Categories:</label> <label class = "control-label">
<div class="form-group">
<label for="options">Categories:</label>
<label class = "control-label">
<div *ngFor="let category of initialCategories">
<input class = "form-control" type="checkbox"
name="categories" #categories="ngModel" value="
{{category.name}}" [(ngModel)]="category.checked"
required/> {{category.name}}
<div [hidden]="categories.valid || categories.pristine
||!categories.dirty">
Please select at least one option.
</div>
</div>
</label>
</div>
类别:
{{category.name}
请至少选择一个选项。
如果我将
div
放在ngFor div
之外以显示错误,那么它将显示未找到的错误,因为它位于循环之外。我们看不到您是否在这里使用NgForm
指令,但是如果您没有使用它,请使用它
目前,您的整个数组只有一个表单控件,您希望每个值都有一个表单控件。所以我们要做的是添加一个动态名称,通过使用迭代的索引来实现
我们可以在复选框上附加更改事件,并且每当单击复选框时,我们都会检查是否至少选中了一个复选框。如果不是,我们将为表单设置一个自定义错误
从复选框的模板中删除required
,导入NgForm
和ViewChild
,以便我们可以在需要设置自定义错误时参考表单。因此,请将模板修改为:
<form #myForm="ngForm">
<label for="options">Categories:</label>
<label>
<div *ngFor="let category of initialCategories; let i = index" >
<input type="checkbox" name="categories{{i}}" #categories="ngModel" value="{{category.name}}" [(ngModel)]="category.checked" (change)="checkValidity()"/> {{category.name}}
</div>
</label>
<div [hidden]="!myForm?.errors?.notValid">
Please select at least one option.
</div>
</form>
您可能还希望在开始时设置自定义错误,因此可以在OnInit
中进行设置
这里有一个演示上述代码。我们看不出您是否在使用
NgForm
指令,但如果您没有使用它,请使用它
目前,您的整个数组只有一个表单控件,您希望每个值都有一个表单控件。所以我们要做的是添加一个动态名称,通过使用迭代的索引来实现
我们可以在复选框上附加更改事件,并且每当单击复选框时,我们都会检查是否至少选中了一个复选框。如果不是,我们将为表单设置一个自定义错误
从复选框的模板中删除required
,导入NgForm
和ViewChild
,以便我们可以在需要设置自定义错误时参考表单。因此,请将模板修改为:
<form #myForm="ngForm">
<label for="options">Categories:</label>
<label>
<div *ngFor="let category of initialCategories; let i = index" >
<input type="checkbox" name="categories{{i}}" #categories="ngModel" value="{{category.name}}" [(ngModel)]="category.checked" (change)="checkValidity()"/> {{category.name}}
</div>
</label>
<div [hidden]="!myForm?.errors?.notValid">
Please select at least one option.
</div>
</form>
您可能还希望在开始时设置自定义错误,因此可以在OnInit
中进行设置
这里有一个演示上述代码。我删除并取消删除了一个答案,因此不会通知您,但请检查我的答案是否符合您的需要:)我删除并取消删除了一个答案,因此不会通知您,但请检查我的答案是否符合您的需要:)