ng-model在ng-repeat中被覆盖

时间:2017-08-28 11:54:02

标签: angularjs angularjs-ng-repeat angular-ngmodel angularjs-ng-init

我有一个带有输入字段的表,我在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;
};

这就是我得到的(截图): This is What I'm getting (screenshot)

331是上次迭代的结果。它覆盖了以前的值。

3 个答案:

答案 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”的新属性(使用名称),因此它将具有与其对象相对应的值。