2013-08-19 35 views
7

使用angularjs進行表單驗證我想在用戶單擊提交時將所有必填字段標記爲錯誤。在angularjs表單驗證中強制ng-dirty

我正在使用input.ng-dirty.ng-invalid來設置帶有錯誤的控件。所以我想要的是當用戶提交表單時,對所需的控件(或所有控件,它對我來說都是一樣的)設置髒的。

驗證正在工作。我明白爲什麼,我所嘗試的可能是錯誤的,但我發現沒有其他方法可以做同樣的效果,除了我認爲太複雜而不正確的事情之外。

我想什麼:

<div ng-app> 
    <form novalidate> 
     <input name="formvalue" type="text" ng-model="formvalue" required /> 
     <input type="submit" /> 
    </form> 
</div> 

http://jsfiddle.net/yq4NG/

回答

8

讓我們在

<div ng-app>...</div> 

​​

開始通過添加角到您的jsfiddle通過包裝它在默認情況下的必填字段將在輸入時被驗證(髒)。如果你想讓他們在任何輸入(原始)之前進行驗證,那麼你可以在你的提交按鈕上運行一個函數,它將檢查原始字段並將其弄髒。

這就是我的例子做了:http://jsfiddle.net/yq4NG/6/

你可以使用自定義格式和驗證可能建立一個可重複使用的解決方案,但是這是在解掉一個簡單的。

編輯:

簡單再次使用只是類:http://jsfiddle.net/yq4NG/8/

EDIT [如在意見提出通過@XMLilley]:

因爲角度不提供$setDirty()方法這相當於$setPristine()我們只需更新$ viewValue和$modelValue的內容即可觸發$dirty狀態。它不會改變任何內容,但會模擬手動輸入每個$pristine字段的用戶,並且不會更改任何內容。

+0

感謝您的解決方案。我忘了保存小提琴,這就是爲什麼我錯過了ng-app。但那是我試圖避免的那種複雜的解決方案。我錯過的東西不是內置的嗎?我無法相信這是一種罕見的角落用法。 (爲控件分配相同的值只是爲了顯示驗證,看起來有點尷尬) – Fernando

+0

角度驗證即將到位並且即時響應。與服務器端驗證不同。必填字段已驗證。如果需要的屬性被設置並且沒有填寫,那麼表單將不會提交,由「ng-invalid-required」類指出。但是這些字段沒有變,因爲它們沒有被改變。 –

+1

@Fernando我用另一種解決方案更新了我的答案,您可能會發現更適合您的需求。如果這不是您正在尋找的解決方案,請告訴我。如果是,請將其標記爲答案。 –