2017-02-14 118 views
0

嗨场我有嵌套表单字段这样Angularjs形成嵌套NG重复

<table> 

    <tbody ng-repeat="student in students">  
    <tr> 
    <td colspan="3">{{student.sname}}</td> 
    </tr> 
    <tr> 
    <td>Subject</td> 
    <td>External Mark</td> 
    <td>Internal Mark</td> 
    </tr> 

    <tr ng-repeat="subject in exam_subjects"> 
    <td>{{subject.subject_name}}</td> 
    <td><input ng-model="subject.student.external_mark"></td> 
    <td><input ng-model="subject.student.internal_mark"></td> 
    </tr> 

</tbody> 

</table> 

这是把科目考试标记为学生。它显示正常,但是当我将标记添加到主题external_mark/internal_mark时,该主题的external_mark/internal_mark的所有字段都会填充相同的值。我该如何处理? 感谢您的任何帮助和建议

+0

有一个复选框或单选按钮,并根据它做任何操作。 –

回答

0

输入需要在窗体中的唯一名称。

<tr ng-repeat="subject in exam_subjects"> 
    <td>{{subject.subject_name}}</td> 
    <td><input name="external_{{$index}}" ng-model="subject.student.external_mark"></td> 
    <td><input name="internal_{{$index}}" ng-model="subject.student.internal_mark"></td> 
    </tr> 
+0

是确切的输入需要是唯一的,但我们如何使这个独特我不认为名称=“外部_ {{$索引}}”将工作,我们必须使模型独特不是名称 – sanu

+0

但我个人尽量避免这种提交给服务器。如果你有很多行并且服务器由于某种原因无法处理它,你需要将错误映射到每一行。从理论上讲,您可能会在页面中看到很多错误消息,只会让最终用户产生混淆/吓唬。你可不要只显示数据,并在每一行添加编辑链接/按钮,打开编辑表格 –

+0

我不认为给一个唯一的ID将解决问题。将每行绑定一个唯一的'scope'变量是必需的 –

0

这个想法是映射每个学生的主题明智的标记与唯一范围变量。为每个学生保存一系列外部和内部标记。 我做你的学生反对与此类似:

$scope.students=[{ 
    "sname": "abc", 
    "marks": [] 
}]; 

$scope.exam_subjects=[{ 
    "id": "1", 
    "subject_name": "Physics" 
    }, 
    { 
    "id": "2", 
    "subject_name": "Maths" 
    }]; 

在你看来:

<tr ng-repeat="subject in exam_subjects"> 
<td>{{subject.subject_name}}</td> 
<td><input ng-model="student.marks[{{subject.id-1}}].external_mark"></td> 
<td><input ng-model="student.marks[{{subject.id-1}}].internal_mark"></td> 
</tr> 

的代码没有进行测试。这只是给你一个这个问题如何解决的想法

0

答案编号2。 现在我知道你在做什么(从你最初的帖子开始,这很困难),我会推荐你​​这样的东西。

注意它只有在您为单个主题有专用的PUT/PATCH功能时才有效。

exam_subjects应该是一个数组。在你的控制器中作为$ scope.exam_subjects。 当你按编辑做这样的事情。

<tr ng-repeat-start="subject in exam_subjects"> 
... 
<td><button ng-click=onEdit(subject)></button></td> 
</tr> 
<tr ng-repeat-end="" ng-if="vm.selectedSubject.Id===subject.Id"> 
<td colspan=""> 
    //your form that you bind to selectedSubject. add submit and Cancel button. 
</td> 
</tr> 

在控制器中。

$scope.onEdit=function(subject){ 
    $scope.selectedSubject = angular.copy(subject); 
    //need to be a copy if you want to be able to Cancel post. Otherwise Angular will update array element directly 
} 
$scope.onCancel = function(); 
    $scope.selectedSubject=''; 
} 
$scope.onSubmit = function(subject){ 
//your submit code 
}