我只是想知道爲什麼我必須在表單的輸入元素上指定name
和ng-model
才能正確使用它。 例如,以下內容:爲什麼我需要在AngularJS中輸入名稱和ng-model?
<form name='test'>
<div>
<input type='radio'
value='create-new'
ng-model='toggle'
required />
<input type='radio'
value='use-existing'
ng-model='toggle'
required />
</div>
<div ng-switch='test.$invalid'>
<div ng-switch-when='true'>Invalid!</div>
<div ng-switch-when='false'>Valid!</div>
</div>
</form>
我會得到輸出Invalid!
當我不選擇一個單選按鈕 - 這是正確的行爲。然而,缺點是我可以訪問這個模型的唯一方法是通過$scope.toggle
- 元素本身不會被$scope.test
(表單容器)中的名稱引用。 $scope.test
將包含驗證規則toggle
,但它會而不是有任何方式讓您知道那些驗證規則屬於toggle
作爲名稱不存在。
如果我們打開它周圍擺上輸入一個名稱屬性:
<form name='test'>
<div>
<input type='radio'
value='create-new'
name='toggle'
required />
<input type='radio'
value='use-existing'
name='toggle'
required />
</div>
<div ng-switch='test.$invalid'>
<div ng-switch-when='true'>Invalid!</div>
<div ng-switch-when='false'>Valid!</div>
</div>
</form>
然後我們ng-switch
底部將始終顯示有效的,即使我已經提到,輸入本身是必需的。此外,toggle
現在顯示在$scope.test
之內,所以我可以在其他地方檢查$scope.test.toggle
的有效性(不需要該元素的內聯屬性)。
如果我結合這兩種方法,並同時使用name
和ng-model
,那麼這兩個結果合併,我得到的結果,我本來期望 - 我可以看到$scope.test.toggle
和模型本身是正確驗證。
我的問題是爲什麼這是適當的行爲?它似乎不同於jquery.validate.unobtrusive
,其中name
屬性是將驗證規則固有地綁定到元素的位。