2014-02-26 12 views
1

我正在嘗試使用Angular的$ dirty標誌只提交表單中已更改的字段。

當我碰到單選按鈕組時,我錯過了更改字段列表中的更改。我有一個fiddle重現了我所看到的問題。最後一個單選按鈕被點擊,即使形式$髒更新時正確

<div ng-app="form-example" ng-controller="MainCtrl"> 
    <form name="form" novalidate> 
     <input type="radio" name="myRadio" ng-model="myRadio" value="one" required>One<br /> 
     <input type="radio" name="myRadio" ng-model="myRadio" value="two" required>Two<br /> 
     <input type="radio" name="myRadio" ng-model="myRadio" value="three" required>Three<br /> 
     <input type="radio" name="myRadio" ng-model="myRadio" value="four" required>Four<br /> 
     <input type="radio" name="myRadio" ng-model="myRadio" value="five" required>Five<br /><br /> 
     Form $dirty: {{form.$dirty}}<br /> 
     Field $dirty: {{form.myRadio.$dirty}}<br /> 
     Value: {{myRadio}} 
    </form> 
</div> 

字段的$髒標誌只會改變。

我在這裏錯過了什麼?並有這種行爲的解決方法?

+0

novalidate屬性是否與FormController沒有設置輸入狀態有關? –

+0

我已經嘗試使用和不使用,novalidate只是禁用HTML5驗證,並且僅在提交時。 –

回答

4

每個ng-model實際實例的控制器。 當您單擊任何單選按鈕時,控制器將$dirty字段設置爲true並將form.$dirty設置爲true。

問題是form.myRadio認爲最後一個單選按鈕的型號爲

作爲解決方法,您可以使用嵌套表格ng-form。請參閱:http://jsfiddle.net/UM578/

+1

非常感謝Mr_Mig和其他任何有此問題的人,請爲表單指定與您的字段相同的名稱,然後更改內部輸入名稱(我附加了.inner) –

0

我給每個無線電輸入一個唯一的名稱。也許你可以更廣泛地看待你想要做的事情。

<div ng-app="form-example" ng-controller="MainCtrl"> 
<form name="form" novalidate> 
    <input type="radio" name="myRadio1" ng-model="myRadio" value="one" required>One<br /> 
    <input type="radio" name="myRadio2" ng-model="myRadio" value="two" required>Two<br /> 
    <input type="radio" name="myRadio3" ng-model="myRadio" value="three" required>Three<br /> 
    <input type="radio" name="myRadio4" ng-model="myRadio" value="four" required>Four<br /> 
    <input type="radio" name="myRadio5" ng-model="myRadio" value="five" required>Five<br /><br /> 
    Form $dirty: {{form.$dirty}}<br /> 
    Field 1 $dirty: {{form.myRadio1.$dirty}}<br /> 
    Field 2 $dirty: {{form.myRadio2.$dirty}}<br /> 
    Field 3 $dirty: {{form.myRadio3.$dirty}}<br /> 
    Field 4 $dirty: {{form.myRadio4.$dirty}}<br /> 
    Field 5 $dirty: {{form.myRadio5.$dirty}}<br /> 
    Value: {{myRadio}} 
</form> 

+0

我試圖自動收集表單中的髒元素,並且使HTML名稱與模型名稱不同,這意味着我無法直接檢查整個組的值是否已隨(formName [fieldName]。$ dirty)更改。 –

+0

我能想到解決這個問題的唯一方法是檢查$ scope.myRadio的值,而不是從每個輸入中檢查$ dirty = true。 – JoelV