我從官方文檔中了解到當(dāng)給form指定name,則會(huì)將form添加到scope中,利用form的name來取得form對(duì)象;同時(shí)也能根據(jù)控件的name,從form對(duì)象中取得控件對(duì)象。
如:
<form role="form" name="infoForm">
<input name="name" class="xxx" ng-model="xxx">
</form>
在controller中
var form = $scope.infoForm;
//如果控件內(nèi)容發(fā)生改變
if(form.name.$dirty) {
...
}
現(xiàn)在遇到的問題是:
有一系列控件是通過ng-repeat生成的,我嘗試過"name = xx{{$index}}"來指定不同的控件,
<form name="adminForm">
管理員名單
<p ng-repeat="manager in theEditingRobot.managers">
<p class="cx-inputer">
<input name="manager{{$index}}" type="email" placeholder="請(qǐng)輸入郵箱"
ng-model="manager.val" ng-blur="checkManager($index)">
</p>
</p>
</p>
結(jié)果發(fā)現(xiàn),雖然在html頁面中可以看到ng-repeat生成的控件name分別為xxx0,xxx1等,但是查看form對(duì)象屬性的時(shí)候發(fā)現(xiàn),沒有xxx0,xxx1等屬性,而只有xxx{{$index}}屬性,且該屬性表示ng-repeat生成的最后一個(gè)input控件。如圖,
html頁面:
如圖所示,ng-repeat生成了2個(gè)input控件
但是在controller中調(diào)試時(shí)發(fā)現(xiàn),form中沒有manager0和manager1屬性,而只有manager{{$index}},該屬性表示manager1
推斷是ng-repeat展開發(fā)生在form添加到scope行為后。那么,如何才能通過form獲取到所有的控件對(duì)象?為什么$scope.adminForm顯示的是Constructor而不是Object?
PS:我使用的是yeoman自動(dòng)生成的框架
PPS: 還發(fā)現(xiàn)form顯示instantiate.c的情況,仍然出現(xiàn)上述問題
JSFiddle鏈接:https://jsfiddle.net/xwadh6kt/1/
<input name="xxx{{$index}}">
注意,表單元素的 name 只能是字符串,無法構(gòu)造數(shù)組或?qū)ο蟮葦?shù)據(jù)類型,但是字符串里可以用雙大括弧解析變量。
剛好回答的時(shí)候我正在做一個(gè)類似的東西,動(dòng)態(tài)生成的表單組使用 ngRepeat
遍歷,給你看實(shí)際效果:
這是對(duì)應(yīng)的源代碼:
id 和 name 我都用了這種方式獲取唯一值。
原因是angularjs的版本問題,我使用1.4的版本就沒有出現(xiàn)上述問題,
詳見:http://stackoverflow.com/questions/24020503/angular-ng-repeat-with-ng-...