【发布时间】:2018-01-23 20:25:15
【问题描述】:
如何验证是否从 Angular 2 模板表单中的复选框列表中选择了至少 1 个复选框?
HTML 代码。
<div class="form-control" style="max-height: 300px; overflow: auto">
<div *ngFor="let item of items" class="checkbox">
<label for="{{item.id}}">
<input type="checkbox" value="{{item.id}}" required id="{{item.id}}" [(ngModel)]="item.isSelected" />
<span class="text-body">{{item.name}}</span>
</label>
</div>
</div>
<div *ngIf="!isAtleastOneItemSelected()" class="alert alert-error">
Select at least one item
</div>
组件代码。
public isAtleastOneItemSelected() {
const selectedItems = this.items.filter((item) => item.isSelected);
if (selectedItems.length > 0) {
return true;
} else {
return false;
}
}
我已经检查了here 的响应式表单方式。所以,想检查我们如何在模板表单中做到这一点。 使用我上面粘贴的代码,一切正常,但在页面加载时显示错误消息,因为那里没有检查脏或触摸。我被这个问题困住了。
对此的任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
我也是,我花了一些时间,这似乎是不可能的:( form.valid 总是正确的
-
你不可能用普通的 ngModel 和自定义验证器来做到这一点。因为你有一个复选框列表,你怎么知道它们是相关的?您必须使用 formGroup 对它们进行分组,然后使用 Reactive Forms 对其进行自定义验证器。工作示例stackblitz.com/edit/…
标签: angular angular2-forms angular-validation