gpt4 book ai didi

angularjs - 在不影响父表单的情况下验证嵌套表单

转载 作者:行者123 更新时间:2023-12-04 12:18:22 25 4
gpt4 key购买 nike

angularjs 1.5 中的嵌套表单存在验证问题,并且存在 issue in github about it .

但是该主题中的 2 个人提供了解决方案,其中一个已向 angularjs 核心开放,即 ngFormTopLevel 指令,另一个由名为isolate-form 的用户提供。

但他们都不能处理这种情况,也不适合我……至少!

让我们假设这个结构:

<ng-form name="X1" novalidate>

<ng-form name="X2" novalidate isolate-form>

<input name="Input01" ng-model="input1" required />
<p ng-show="X2.Input01.$touched && X2.Input01.$invalid">input is not valid</p>

<input name="Input02" ng-model="input2" required />

<input type="button" id="ButtonX2" value="Submit Nested Form" ng-disabled="X2.$invalid" />

</ng-form>

<input name="Input03" ng-model="input3" required ng-minlength="5" />

<input type="button" id="ButtonX1" value="Submit Nested Form" ng-disabled="X1.$invalid" />

</ng-form>

tl;博士:
ButtonX1 依赖于嵌套表单验证,它不应该!

测试案例1:

步骤 1:用任意文本和 5 个以上的字符填充 input3。

预期:ButtonX1 应启用。

结果:ButtonX1 仍然被禁用。

测试案例2:

第 1 步:用任何文本填充 input1。

第 2 步:用任何文本填充 input2。

预期:应启用 ButtonX2。

结果:ButtonX2 已启用。

测试案例 3:

步骤 1:用任意文本和 5 个以上的字符填充 input3。

第 2 步:用任何文本填充 input1。

第 2 步:用任何文本填充 input2。

预期:应启用 ButtonX1 和 ButtonX2。

结果:ButtonX1 和 ButtonX2 已启用。

另一个问题是当 Input01 无效时,嵌套表单中的 P 标签不显示。
我尝试了isolateForm 和ngFormTopLevel 但它们都有这个问题。

最佳答案

似乎唯一需要的是在父表单 Controller 上调用 $removeControl 。这个非常简单的指令一直在为我工作。适用于您的 ng-form。

function isolateFormDirective () {
return {
restrict: 'A',
require: ['form', '^form'],
link: function(scope, element, attrs, forms) {
forms[1].$removeControl(forms[0]);
}
}
}

export default isolateFormDirective;

关于angularjs - 在不影响父表单的情况下验证嵌套表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37938530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com