2016-08-03 44 views
0

我有一個html窗體,我使用angular js爲每個輸入添加驗證。角js設置窗體到原始虛假

但我不想在html加載時最初顯示驗證錯誤,直到用戶對錶單進行了一些更改。

所以我喜歡驗證:

<form name="addApplicationForm" accept-charset="UTF-8" novalidate> 
    <input type="text" name="name" ng-model="applicationData.application_name" required> 
    <div ng-show="addApplicationForm.name.$invalid && !addApplicationForm.name.$pristine"> 
     <span class="error" ng-show="addApplicationForm.name.$error.required">Please enter application name.</span> 
    </div> 
    <button ng-click="submit()">Submit</button> 
</form> 

而且這種形式的作品如我所料。現在,如果用戶直接單擊提交按鈕而不對輸入進行任何更改,則$ pristine狀態仍然爲真,現在顯示錯誤。但是在這裏我想向用戶顯示驗證錯誤。

這就是爲什麼提交時,我想將表單的$ pristine狀態設置爲false,但我沒有看到它的方法。

我也試圖與$髒的,而不是$質樸,如:

<form name="addApplicationForm" accept-charset="UTF-8" novalidate> 
    <input type="text" name="name" ng-model="applicationData.application_name" required> 
    <div ng-show="addApplicationForm.name.$invalid && !addApplicationForm.name.$dirty"> 
     <span class="error" ng-show="addApplicationForm.name.$error.required">Please enter application name.</span> 
    </div> 
    <button ng-click="submit()">Submit</button> 
</form> 

而且在提交我只是調用了setDirty方法使窗體髒,因此它顯示提交按鈕點擊錯誤。

但這裏的問題是,我也有一個重置按鈕的形式。一旦點擊,我想清除表單的所有字段,然後我需要將表單的髒標誌設置爲false,但我沒有任何此類選項。但是對於這種情況,如果我使用$ pristine,我已經$ setPristine()。

所以在這種情況下,無論我使用$ dirty或$ pristine,我在這裏有一個問題。

請告訴我可能是什麼解決方案。

+0

如果答案不夠,請在提交和重置按鈕中提供最少的工作片段。 – zoom

回答

1

$ pristine和$ dirty應該一起工作。使用$setPristine$pristine屬性的形式設置爲true,$dirty設置爲false。 $setDirty會做相反的事情。

您的問題似乎與您正在測試表單域的$pristine$dirty屬性(請參閱https://docs.angularjs.org/api/ng/type/ngModel.NgModelController)有關。在表單控制器上執行$setPristine也會傳播到表單的每個字段,而$setDirty不會。

你可以看看的角度的源代碼,其屬性設置(#setPristine和#setDirty),這部分代碼是明確的,易於閱讀:https://github.com/angular/angular.js/blob/master/src/ng/directive/form.js

+0

謝謝,它的工作原理。其實我並不知道$ setDirty使表單變髒而不是輸入字段,如果我使用setPristine,它會使表單變髒。 – Indra

0

在這種特定的情況下,不需要設置你的form任何東西。

你只需要你的支票更改爲:

<div ng-show="addApplicationForm.name.$invalid && addApplicationForm.name.$dirty"> 

我建議你使用this指令。

另請參閱tutorial