如何获取ng-repeat内动态添加的带ng-model的输入框值?
解决ng-repeat内部ng-model值获取问题的方案
问题代码
<tbody> <tr ng-repeat="eta in etaArray"> <td ng-init="modelIndex =$index">{{$index+1}}</td> <td style="visibility: hidden">{{eta.BKE_ID}}</td> <td style="visibility: hidden">{{eta.BKE_POINT}}</td> <td>{{modelIndex}}</td> <td>{{eta.BKE_POINT_Text}}</td> <td>{{eta.BKE_DESC}}</td> <td>{{eta.BKE_DATE | date:'dd-MM-yyyy'}}</td> <td> <input class="form-control factDateInput" value="{{eta.BKE_FACTDATE| date:'yyyy-MM-dd' }}" ng-keyup="trackTimeChanging($event,this,$index)" ng-model="factDate[$index]" style="width: 55%" type="date" id="inputFactDate" /> </td> </tr> </tbody>
可行解决方案
方案1:直接绑定到数组元素属性(推荐)
放弃单独维护factDate数组,将ng-model直接绑定到eta对象的属性上,控制器中遍历etaArray即可获取对应值:
<input class="form-control factDateInput" ng-model="eta.BKE_FACTDATE" ng-keyup="trackTimeChanging($event,this,$index)" style="width: 55%" type="date" id="inputFactDate" />
控制器中取值:
$scope.etaArray.forEach(item => { console.log(item.BKE_FACTDATE); });
方案2:提前初始化factDate数组
若坚持使用独立的factDate数组,需在控制器中提前初始化,保证数组长度与etaArray一致,让AngularJS能正常追踪:
// 基于etaArray初始化factDate $scope.factDate = $scope.etaArray.map(item => { return new Date(item.BKE_FACTDATE); });
此时视图中factDate[$index]可正常绑定,控制器直接访问$scope.factDate即可拿到所有值。
方案3:通过事件传递当前值
利用已有的trackTimeChanging方法,在事件中直接传递当前ng-model值:
ng-keyup="trackTimeChanging($event, factDate[$index], $index)"
控制器处理逻辑:
$scope.trackTimeChanging = function(event, value, index) { console.log(`第${index+1}项日期值:`, value); $scope.factDate[index] = value; };
方案4:通过$parent访问父作用域(不推荐)
若ng-repeat子作用域导致无法访问父作用域的factDate,可使用$parent前缀绑定:
ng-model="$parent.factDate[$index]"
此方式不够直观,仅作为临时替代方案。
内容的提问来源于stack exchange,提问作者FarHard112
相关产品推荐
相关产品推荐

