【发布时间】:2013-05-20 11:37:58
【问题描述】:
required 和 ng-required(表单验证)有什么区别?
【问题讨论】:
required 和 ng-required(表单验证)有什么区别?
【问题讨论】:
AngularJS 表单元素寻找required 属性来执行验证功能。 ng-required 允许您根据布尔测试设置 required 属性(例如,只需要字段 B - 比如说,学生编号 - 如果字段 A 具有特定值 - 如果您选择“学生”作为选项)
例如,<input required> 和 <input ng-required="true"> 本质上是同一个东西
如果您想知道为什么会这样,(而不仅仅是制作<input required="true"> 或<input required="false">),这是由于 HTML 的限制 - required 属性没有关联值 - 它的存在意味着(根据 HTML 标准)该元素是必需的 - 因此 Angular 需要一种设置/取消设置所需值的方法(required="false" 将是无效的 HTML)
【讨论】:
<form method="post" action="/foo" novalidate>。同样,这是一个 html5 属性,与 angularJS 无关。
ng-required 指向范围/控制器变量时,Angular 会监视它的变化并相应地设置所需的属性。而在简单的 HTML required 属性的情况下,您没有那种灵活性。不?当我们讨论同一个话题时,ng-attr-required 呢?和ng-required一模一样吗?
我想为tiago's answer做一个插件:
假设您使用 ng-show 隐藏元素并在其上添加 required 属性:
<div ng-show="false">
<input required name="something" ng-model="name"/>
</div>
会抛出类似的错误:
name='' 的无效表单控件不可聚焦
这是因为您不能对hidden 元素强加required 验证。使用ng-required 可以更轻松地有条件地应用所需的验证,这真是太棒了!!
【讨论】:
ng-if 而不是ng-show/ng-hide 来回避这个潜在问题。
HTML 属性 required="required" 是一条语句,告诉浏览器该字段是必需的,以使表单有效。 (required="required" 是 XHTML 表单,只使用 required 是等效的)
Angular 属性 ng-required="yourCondition" 表示“isRequired(yourCondition)”并根据您的条件为您动态设置 HTML 属性。
还请注意,HTML 版本令人困惑,不可能编写诸如required="true" 或required="false" 之类的条件内容,只有属性的存在才重要(现在意味着真实)!这就是 Angular 通过ng-required 帮助您的地方。
【讨论】: