2013-05-20 71 views

回答

403

AngularJS表單元素查找required屬性以執行驗證功能。 ng-required允許您根據布爾測試設置required屬性(例如,只需要字段B - 說,學生號碼 - 如果字段A有一定的值 - 如果您選擇「學生」作爲選擇

舉個例子,<input required><input ng-required="true">基本上是相同的事情

如果你想知道爲什麼這是這樣,(而不僅僅是讓<input required="true"><input required="false">),這是由於限制HTML - required屬性沒有相關的價值 - 其僅存在的手段(根據HTML標準)該元素是必需的 - 所以角度需要一種方法來設置/取消設置所需的值(required="false"將是無效的HTML)

+0

如何分別刪除ng-required?因爲我嘗試了一些沒有成功的jquery方法 – themis

+28

我不確定我是否理解這個問題。在實踐中,您從不使用ng-required =「true」,而是使用ng-required =「scopedVariable」或ng-required =「 scopeTruthTest()「,並且變量/函數的值確定元素是否是必需的。切勿使用jquery在角度應用程序中混淆這些內容,否則會產生不可預測的結果! –

+0

值得一提的是,ng-required會顯示一個默認的工具提示樣式錯誤消息,說'這個字段是必需的',這並不總是需要的。我正在尋找一種方法來關閉它 –

76

我想做一個插件爲tiago's answer

假設你隱藏使用ng-show元素,在同一添加required屬性:

<div ng-show="false"> 
    <input required name="something" ng-model="name"/> 
</div> 

將拋出一個錯誤是這樣的:

與name =「」無效表單控件不可作爲焦點

這是因爲你不能在hidden元件施加required驗證。使用ng-required可以更容易地有條件應用需要的驗證,這只是真棒!

+11

絕對是一個很好的提示,你也可以使用'ng-if'而不是'ng-show' /'ng-hide'來回避潛在的問題。 – jkjustjoshing

+1

這應該是被接受的答案。如果你有隱藏的元素(ng-show =「false」),那麼在這個答案中描述的ng-required =「true」和只是'required'之間是有區別的,並且由於這個差異我們進入了熱水。 –

16

HTML屬性required="required"是一條聲明,告訴瀏覽器此表單是必需的,才能使表單有效。 (required="required"是XHTML形式,只是用required相當於)

角屬性ng-required="yourCondition"手段「isRequired(yourCondition)」,並設置HTML屬性動態您根據您的病情進行。

還要注意的是HTML版本是混亂,它是可以寫東西像條件或required="true"required="false",只有屬性問題的存在(目前指真)! Angular通過ng-required幫助你。

+0

不幸的是,瀏覽器不允許把真/假,可能被認爲太技術... –

+3

這應該是被接受的答案。 – AsGoodAsItGets

相關問題