我創建了一個plunkr來演示這個問題。基本上有三個<input type="text">
元素,其html5 pattern
屬性設置爲^\d{2}[/]\d{2}[/]\d{4}$
所有這些元素。這三個文本框之間的區別在於,其中一個直接位於<form>
內,另一個位於子組件內,位於<form>
標記內。最後一個文本框完全在<form>
之外,我期待他們所有三個人在模式驗證方面表現相同,因爲他們都有Angular2類(ng-touched
,ng-invalid
等)集,它告訴我他們是Angular2控件。然而,問題是,他們從來沒有設置爲ng-valid
,並始終保持ng-invalid
即使輸入值99/99/9999
根據以下的正則表達式的網站這是一種有效匹配:angular2,爲什麼這個html5驗證不能在ngForm中工作
有趣,當文本框收到或失去焦點時,ng-untouched
和ng-pristine
會更新爲適當的類。那麼我在這裏錯過了什麼?爲什麼輸入模式更改不會將css類更新爲ng-valid
?這是我提到的plunkr:https://plnkr.co/edit/kW861I8OdnO9iR0328KP?p=preview
更新
如果這些文本框放置在<my-app>
外又名根元素,他們的工作只是罰款和瀏覽器驗證似乎認識到了模式有效。我用txt 4
更新了plunkr。
試試看http://blog.thoughtram.io/angular/2016/03/14/custom-validators-in-angular-2.html – rashfmnb
@rashfmnb這是聲明式的方法,我的解決方案是使用html5驗證構建的。這比幾個文本框要複雜得多,我用這個來證明這個問題。它在一些地方有效,但不是在上述情況下,所以不太確定它應該如何表現。 – RoninCoder
其實我也嘗試在開始時使用文本框,但最終以上面的鏈接認爲它不被角度支持,現在可能會在最終版本中發佈。我把你的問題標記爲最喜歡的,所以我可能得到一些人的啓發回答 – rashfmnb