【问题标题】:ng-model overwritten within ng-repeat在 ng-repeat 中覆盖 ng-model
【发布时间】:2017-08-28 20:55:59
【问题描述】:

我有一个带有输入字段的表,我在ng-repeat 的每次迭代中将值设置为ng-model。我在每次迭代中都得到了正确的值,但是所有 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 是最后一次迭代的结果。它正在覆盖以前的值。

【问题讨论】:

  • 它应该有不同的模型。像这样ng-model="item.da"
  • @Hadi 你能解释一下吗?我是菜鸟
  • 请分享Allsubjects对象
  • @Hadi 这个表应该进入学生的标记列表。从数据库中获取的所有主题列表(屏幕截图中的表格标题中的 sub1 sub2 sub3)。
  • Allsubjects 似乎没有连接到 student_list;这似乎是错误;只有一个 student_list 实例(由于 ng-repeat 多次出现,但都引用同一个对象)。

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


【解决方案1】:

是的,迭代的最后一个值将被分配给“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 数组中的每个 student 对象创建一个名为“da”(您使用的名称)的新属性,因此它将具有与其对象相对应的值。

【讨论】:

    【解决方案2】:

    我认为您的问题的根源是您的对象定义。

    尝试像这样创建你的对象

    $scope.student_list = [
      student1 = {
        Rollnumber : 9999,
        Name : "Foo", 
        sub1 : 0 
      }
    ]
    

    等等...它应该为每个元素提供不同的ng-model。但是如果您可以共享您的对象,那么找到实际错误会更有帮助。

    【讨论】:

      【解决方案3】:
      <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>
      

      这里我们为模型(即item)添加动态值,现在它不会覆盖模型值,您可以通过定义的函数轻松获取它:

      $scope.alert = function(id,item)
      {
          $scope.da+item = id;
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-13
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多