我有一个带有输入字段的表,我在ng-model
的每次迭代中将值设置为ng-repeat
。我在每次迭代中得到正确的值,但所有ng-model
值都被迭代的最后一个值覆盖。我该如何解决这个问题?
视图
<tr ng-repeat="student in students_list">
<td>{{student.Rollnumber}}</td>
<td>{{student.Name}}</td>
<td ng-repeat="item in Allsubjects" >
<input type="text" class="form-control" ng-model="da"
ng-init="alert(student.Id)">
</td>
</tr>
控制器
$scope.alert = function(id)
{
$scope.da =id;
};
这就是我得到的(截图):
331是上次迭代的结果。它覆盖了以前的值。
答案 0 :(得分:0)
我认为问题的根源是你的对象定义。
尝试像这样创建你的对象
$scope.student_list = [
student1 = {
Rollnumber : 9999,
Name : "Foo",
sub1 : 0
}
]
等......它应该为每个元素提供不同的ng-model
。但如果你可以分享你的对象,找到实际的错误会更有帮助。
答案 1 :(得分:0)
<tr ng-repeat="student in students_list">
<td>{{student.Rollnumber}}</td>
<td>{{student.Name}}</td>
<td ng-repeat="item in Allsubjects" >
<input type="text" class="form-control" ng-model="da"+item
ng-init="alert(student.Id,)">
</td>
</tr>
这里我们为模型添加动态值(即项目),现在它不会覆盖模型值,您可以通过定义的函数轻松获取它:
$scope.alert = function(id,item)
{
$scope.da+item = id;
};
答案 2 :(得分:0)
是的,期望的行为是迭代的最后一个值将被分配给“da”
您可以通过
解决此问题<tr ng-repeat="student in students_list">
<td>{{student.Rollnumber}}</td>
<td>{{student.Name}}</td>
<td ng-repeat="item in Allsubjects" >
<input type="text" class="form-control" ng-model="student['da']"
ng-init="alert(student)">
</td>
</tr>
和警报功能
$scope.alert = function(student)
{
student["da"] = student.id;
};
在这里,我们只是为student_list数组中的每个学生对象创建一个名为“da”的新属性(使用名称),因此它将具有与其对象相对应的值。