ngbNav 中的非活动选项卡验证
Inactive tab validation in ngbNav
我有一个带有两个选项卡和一个保存按钮(在选项卡外)的表单。第一个选项卡具有需要验证的文本框。当用户打开第二个选项卡(即第一个选项卡处于非活动状态)并单击保存按钮时,“必需”验证不会以某种方式触发。
HTML代码:
<form #frm="ngForm" (ngSubmit)="onSave(frm)" >
<button type="submit">Save</button>
<ul ngbNav #nav="ngbNav" class="nav-tabs">
<li [ngbNavItem]="1">
<a ngbNavLink>Details</a>
<ng-template ngbNavContent>
<input type="number" class="form-control numeric" id="inputNumber" name="inputNumber"
[(ngModel)]="inputNumber" required />
</ng-template>
</li>
<li [ngbNavItem]="1">
<a ngbNavLink>Charts</a>
<ng-template ngbNavContent>
</ng-template>
</li>
</ul>
</form>
TS代码:
onSave(form) {
if (!form.valid) { // Valid returns true when the user has opened the second tab and click on save
return
};
}
我该如何解决这个问题?
如果该选项卡处于非活动状态,则会将其从 DOM 中删除。所以该字段不存在,无法验证。我建议您为错误设置单独的字段,并根据该字段显示或隐藏错误消息。
ngbNav 提供保留隐藏 dom 元素的功能,以防这些元素来自非活动选项卡。在您的情况下,由于您的元素位于另一个选项卡中,您可以将其保留在 DOM 中,这很容易被验证。
需要在 ul(添加 ngbNav 的地方)上使用 [destroyOnHide]="false"
。
使用 [destroyOnHide]="false"
可以快速解决问题。
在长运行中,值得考虑reactive forms.
它很灵活,可以处理任何复杂的场景。它是更多的组件代码和更少的 HTML 标记,更容易用单元测试覆盖。
虽然需要时间来掌握。需要几个小时的培训或阅读文档。
我有一个带有两个选项卡和一个保存按钮(在选项卡外)的表单。第一个选项卡具有需要验证的文本框。当用户打开第二个选项卡(即第一个选项卡处于非活动状态)并单击保存按钮时,“必需”验证不会以某种方式触发。
HTML代码:
<form #frm="ngForm" (ngSubmit)="onSave(frm)" >
<button type="submit">Save</button>
<ul ngbNav #nav="ngbNav" class="nav-tabs">
<li [ngbNavItem]="1">
<a ngbNavLink>Details</a>
<ng-template ngbNavContent>
<input type="number" class="form-control numeric" id="inputNumber" name="inputNumber"
[(ngModel)]="inputNumber" required />
</ng-template>
</li>
<li [ngbNavItem]="1">
<a ngbNavLink>Charts</a>
<ng-template ngbNavContent>
</ng-template>
</li>
</ul>
</form>
TS代码:
onSave(form) {
if (!form.valid) { // Valid returns true when the user has opened the second tab and click on save
return
};
}
我该如何解决这个问题?
如果该选项卡处于非活动状态,则会将其从 DOM 中删除。所以该字段不存在,无法验证。我建议您为错误设置单独的字段,并根据该字段显示或隐藏错误消息。
ngbNav 提供保留隐藏 dom 元素的功能,以防这些元素来自非活动选项卡。在您的情况下,由于您的元素位于另一个选项卡中,您可以将其保留在 DOM 中,这很容易被验证。
需要在 ul(添加 ngbNav 的地方)上使用 [destroyOnHide]="false"
。
使用 [destroyOnHide]="false"
可以快速解决问题。
在长运行中,值得考虑reactive forms.
它很灵活,可以处理任何复杂的场景。它是更多的组件代码和更少的 HTML 标记,更容易用单元测试覆盖。
虽然需要时间来掌握。需要几个小时的培训或阅读文档。