2013-10-22 53 views
23

有沒有任何方法可以在自定義表單驗證中傳遞錯誤消息?AngularJS自定義表單驗證錯誤消息

E.g.我有一個檢查用戶名的指令。有三種可能的結果:

  1. 它是有效的
  2. 它是無效的,因爲它不是一個很好的用戶名(「this.is-無效」)
  3. 它是無效的,因爲它已經在使用

我有這樣(簡化僞HTML)一個指令:

<input type="text" namecheck></input><span ng-show="name.$error.namecheck">You had an error {{ error }}</span> 

而且在我的自定義指令,我可以做

// check for a conflict and valid name here 
ngModel.$setValidity("namecheck",false); 

但是,如何傳遞指示問題是衝突還是無效名稱的錯誤消息?有什麼像ngModel.$setValidityErrorMessage()

+0

@Whisher,所以沒有辦法告知用戶界面什麼是無效的?我是否可以在指令'link'內的範圍上設置錯誤信息? – deitch

+0

哈!只是想通了!我可以使用不同的有效性! 'ngModel。$ setValidity('nameunique',false)'不同於'ngModel。$ setValidity('nameinvalid',false)' – deitch

回答

42

正如我在評論中寫的那樣,我只是想通了。我只需要使用不同的有效性標誌。沒有說我必須使用$setValidity()中的同一個密鑰作爲指令的名稱!

<span ng-show="name.$error.nameinvalid">This is not a valid username, it must be alphanmueric</span> 
<span ng-show="name.$error.nametaken">Sorry, the username {{ name }} is already taken</span> 

而在指令

// if I got a 409 
ngModel.$setValidity("nametaken",false); 
// if I got a 400 
ngModel.$setValidity("nameinvalid",false); 

$error名稱是錯誤消息!

+3

您也可以在指令中綁定模型,並在此處添加錯誤消息(如果您有多個來自服務器的不同錯誤消息) – TaylorMac

+2

您能否提供此示例? –

2

否。在表單元素上設置有效性只是簡單地將相應的類添加到元素中,然後可以使用該元素對元素進行樣式設置以指示錯誤。沒有任何錯誤消息表明元素爲何無效。 Angular不提供這種支持。

您可能已經注意到在required域上彈出的錯誤消息是空的?在chrome中,他們會這樣說:「請填寫此字段」或其他內容。這些是瀏覽器特定的,並且與角度無關。

你必須推出自己的錯誤消息服務。您可以使用相同的ng-invalid類來檢查表單元素何時無效並基於此類顯示錯誤消息,但Angular並未提供該表單。

在角度文檔中找到一個示例(找到here),其中顯示了一種可以做到這一點的方法。

UPDATE:

角度1.3,現在爲ngMessagengMessages指令支持。這些新指令試圖使表單驗證和錯誤消息更加容易。這些指令的角度文檔是here。檢查鏈接瞭解更多詳情。

+0

我很確定,但是我的問題是*如何*我可以從指令中設置特定的錯誤消息? – deitch

+1

順便說一句,你分享的鏈接已經死了,你可以編輯它嗎? – deitch

+0

對,對不起。角度1.2-rc3文檔在絕對鏈接上很難。以下是具有相同示例的angular 1.5文檔的鏈接:http://code.angularjs.org/1.1.5/docs/api/ng.directive:form。希望有所幫助。 – tennisgent