当有标准的 maxlength 时,为啥 Angular 会提供 ng-maxlength?

Posted

技术标签:

【中文标题】当有标准的 maxlength 时,为啥 Angular 会提供 ng-maxlength?【英文标题】:Why does Angular provide ng-maxlength when there is a standard maxlength?当有标准的 maxlength 时,为什么 Angular 会提供 ng-maxlength? 【发布时间】:2015-01-10 12:38:40 【问题描述】:

html provides 自 4.01 版以来的标准 maxlength 属性。 Angular 提供了一个ng-maxlength 指令。

不同之处在于标准方法不允许输入超过最大值,而 Angular 的方法只会产生验证错误。

他们为什么决定加入这样的指令?这不是因为 maxlength 的动态数据绑定,因为行为不一致。这不是因为兼容性,因为它甚至在 HTML 4.01 中也可用。我唯一的猜测是它提供了另一种验证范式,但这听起来像是过度设计。

【问题讨论】:

正如你所说 - maxlength 定义了 HTML 元素的属性。 ng-maxlength 定义了如何验证模型。也许它是过度设计的,也许不是。我想这很随意。 你可能会问同样的问题,为什么要使用ng-validate 来检查某个东西是否是数字,或者只使用<input type="number">(暂时忘记兼容性问题) @BarthZalewski - 公平点:programmers.stackexchange.com/questions/262659/… 这很好,@Den 【参考方案1】:

它不仅提供最大长度验证,还添加了一个类ng-invalid-maxlength。 因此,当您放置超出限制的任何内容时,ng-invalid-maxlength 类将放在那里 在该课程中,您可以编写自己的 css。

因此,如果验证失败,按下按键后,css 将同时被调用并反映在您的 UI 上。

【讨论】:

“使用普通 maxlength 属性时也会添加此指令”...所以这个答案更正确。【参考方案2】:

以前的答案在早期版本的 Angular 中可能是正确的,但截至今天和 Angular v1.5.5,看起来 maxlengthng-maxlength 做的事情完全相同,但也对输入强制执行 HTML 输入 maxlength 属性文本类型。

示例:

<input type="text" maxlength=5>

maxlength 将强制输入最多 5 个字符,并将正确的角度验证类添加到输入。

ngMaxlength 只会强制执行验证。见:https://docs.angularjs.org/api/ng/directive/ngMaxlength

建议: 只需使用maxlength

【讨论】:

以上是关于当有标准的 maxlength 时,为啥 Angular 会提供 ng-maxlength?的主要内容,如果未能解决你的问题,请参考以下文章

当有前导空格时,为啥 Pandas series.str.contains 方法无法检测到匹配?

当有填充的tbody时,为啥jQuery DataTable会显示“表中没有可用数据”

当有 SOCKS 代理时,为啥我的脚本遵循 /etc/hosts 而浏览器不遵循?

为啥 <input type="number" maxlength="3"> 在 Safari 中不起作用?

为啥 <input type="number" maxlength="3"> 在 Safari 中不起作用?

[转]TextArea设置MaxLength属性最大输入值的js代码