我创建了一个用来证明这个问题的傻瓜。基本上,有三个<input type="text">
元素,其中html5 pattern
属性设置为^\d{2}[/]\d{2}[/]\d{4}$
。这三个文本框之间的区别在于,一个直接位于<form>
内,另一个位于子组件内,并且位于<form>
标记内。最后一个文本框完全在<form>
之外,我希望它们中的所有三个在模式验证上的行为相同,因为它们都有Angular2类(ng-touched
,ng-invalid
等。 。)set,告诉我他们是Angular2控件。但问题是,即使输入值为ng-valid
,根据以下正则表达式网站的有效匹配,它们也永远不会设置为ng-invalid
并始终保持99/99/9999
:
有趣的是,ng-untouched
和ng-pristine
会在文本框收到或失去焦点时更新到正确的类。那我在这里错过了什么?为什么输入模式更改不会将css类更新为ng-valid
?这是我提到的那个傻瓜:https://plnkr.co/edit/kW861I8OdnO9iR0328KP?p=preview
更新
如果这些文本框中的任何一个放在<my-app>
又名根元素之外,它们工作正常,浏览器验证似乎认为该模式有效。我用txt 4
更新了plunkr。
答案 0 :(得分:1)
Plunker使用旧的表单模块(尝试了一些解决方法 - 没有帮助),我已经检查了新模块 - 它的工作原理。检查官方文档并添加以下内容:
bootstrap(Application, [
...
disableDeprecatedForms(),
provideForms(),
...
]);