【发布时间】:2015-04-28 10:12:05
【问题描述】:
我正在使用 angular-auto-validate 并且遇到了一些状态管理问题。我有一个多部分表单,其中需要一些字段(姓名/电子邮件地址),并且用户可以“返回”以更改答案。基本上,我对表格中的每个阶段都有一个部分,它运行良好,但有一个例外。如果该字段无效,则继续按钮将被禁用。我尝试简单地使用 $valid 标识符,但是当部分加载时,每个字段都以 ng-valid 开头,所以我可以使用 $touched 或 $pristine。问题是,当用户返回时,绑定到数据源的值是有效的,但没有触及该字段,因此不会激活继续按钮。示例代码(这是我点击“返回”按钮后生成的代码):
<input type="text" name="name" ng-minlength="3" ng-model="myModel" placeholder="Your First Name" ng-focus="inputFocused()" ng-pattern-err-type="" ng-model-options="{updateOn: 'blur'}" class="ng-valid ng-valid-pattern ng-valid-minlength">
和按钮:
<a href="/#/setup" class="button round" ng-class="{'disabled': !signupForm.name.$valid || !signupForm.name.$touched }" ng-click="completeStep()">Continue</a>
如何禁用默认 ng-valid 或识别控制器填充值的条件?
【问题讨论】:
-
您可能想使用
$dirty吗?我认为 $touched 只是为了专注 -
根据文档,这意味着表单已被交互。我认为当页面是新加载并且表单已预先填充时,这将不起作用......
-
我很确定,当您预先填充数据时,它会变脏。如果您在控制器中设置范围,那么该范围变量将是脏的
-
dirty 在预填充时不适用(至少在我的应用中)。
标签: angularjs