【问题标题】:What is the difference between required and ng-required?required 和 ng-required 有什么区别?
【发布时间】:2013-05-20 11:37:58
【问题描述】:

requiredng-required(表单验证)有什么区别?

【问题讨论】:

    标签: angularjs required


    【解决方案1】:

    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)

    【讨论】:

    • 如何分别删除 ng-required?因为我尝试了一些jquery方法没有成功
    • 我不确定我是否理解这个问题。在实践中,您从不使用 ng-required="true",而是使用 ng-required="scopedVariable" 或 ng-required="scopeTruthTest( )”,变量/函数的值决定了是否需要该元素。永远不要在 Angular 应用程序中使用 jquery 来搞乱这些事情,否则你会得到不可预知的结果!
    • 值得一提的是,ng-required 会显示一个默认的工具提示样式错误消息,说“此字段是必需的”,这并不总是需要的。我正在寻找一种方法来关闭它
    • 确实没有。不确定,但我认为您指的是 html5 验证,它是由大多数现代浏览器自动执行的。如果您想对此进行控制(禁用浏览器的功能),您可以添加属性 novalidate:<form method="post" action="/foo" novalidate>。同样,这是一个 html5 属性,与 angularJS 无关。
    • 我本以为当ng-required 指向范围/控制器变量时,Angular 会监视它的变化并相应地设置所需的属性。而在简单的 HTML required 属性的情况下,您没有那种灵活性。不?当我们讨论同一个话题时,ng-attr-required 呢?和ng-required一模一样吗?
    【解决方案2】:

    我想为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 来回避这个潜在问题。
    • 这应该是公认的答案。如果您有隐藏元素(ng-show="false"),则 ng-required="true" 与此答案中所述的“必需”之间存在差异,并且由于这种差异,我们陷入了困境。
    【解决方案3】:

    HTML 属性 required="required" 是一条语句,告诉浏览器该字段是必需的,以使表单有效。 (required="required" 是 XHTML 表单,只使用 required 是等效的)

    Angular 属性 ng-required="yourCondition" 表示“isRequired(yourCondition)”并根据您的条件为您动态设置 HTML 属性。

    还请注意,HTML 版本令人困惑不可能编写诸如required="true"required="false" 之类的条件内容,只有属性的存在才重要(现在意味着真实)!这就是 Angular 通过ng-required 帮助您的地方。

    【讨论】:

    • 是的,可惜浏览器不允许设置真/假,可能被认为过于技术性......
    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 2021-08-10
    • 2013-10-31
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多