我正在构建一个Angular 的应用程序,我有一些形式设置。我有一些需要在提交前填写的字段。因此,我在上面添加了“必需”:
<input type="text" class="form-control" placeholder="Test" ng-model="data.test" required>
然而,当我启动我的应用程序时,字段显示为“无效”,类显示为“ng-invalid”和“ng-invalid-required”,甚至在单击提交按钮之前或在用户在字段中键入任何内容之前。
我怎样才能确保这两个类不会立即被添加,而是在用户提交表单或者在相应的字段中键入错误的内容时添加?
5条答案
按热度按时间dnph8jn41#
由于输入是空的,因此在示例化时无效,Angular正确地添加了
ng-invalid
类。你可以尝试的CSS规则:
这基本上是说,当字段在页面加载后的某个时候输入了一些东西,并且没有被
$scope.formName.setPristine(true)
重置为原始状态,并且还没有输入一些东西,并且它是无效的,那么文本就会变成red
。其他对Angular表单有用的类(参见input for future reference)
ng-valid-maxlength
-当ng-maxlength
通过时ng-valid-minlength
-当ng-minlength
通过时ng-valid-pattern
-当ng-pattern
通过时ng-dirty
-当表单在加载后有输入时ng-pristine
-当表单输入在加载后没有插入任何内容时(或者它通过表单上的setPristine(true)
重置)ng-invalid
-当任何验证失败时(required
、minlength
、自定义验证等)同样,所有这些模式和任何创建的自定义模式也有
ng-invalid-<name>
。bgibtngc2#
感谢这篇文章,我使用这种风格来删除当显示必填字段时自动出现的红色边框,但用户没有机会输入任何内容:
rjee0c153#
由于字段是空的,它们是无效的,因此
ng-invalid
和ng-invalid-required
类被正确添加。您可以使用类
ng-pristine
来检查字段是否已经被使用。nzk0hqpo4#
以下方法是针对旧版AngularJS的:
当表单已提交或字段无效时,尝试动态添加验证类。使用表单名称并将“name”属性添加到输入中。Bootstrap示例:
同样重要的是,您的表单具有
ng-submit=""
属性:您还可以在表单中添加一个可选的验证函数:
现在,当您加载应用程序时,类
'has-error'
仅在提交表单或触摸字段时才会添加。而不是:!myForm.username.$pristine
您还可以用途:
myForm.username.$dirty
适用于新Angular 2+
这是基于Bootstrap 5.3和Angular 15/16的,将来可能会改变。
在组件表单中,确保你已经将
myForm
修改为你需要的表单变量。0pizxfdo5#
公认的答案是正确的。对于移动的,你也可以使用这个(ng-touched rather ng-dirty)