【发布时间】:2023-03-24 11:14:02
【问题描述】:
我有一个视图可以管理一段时间(三个月或学期)内的学校考试。每个学期可以有许多普通类型的测试,但只有一种类型的考试。
我在 jsFiddle 中创建了一个脚本,显示了我正在寻找的行为 https://jsfiddle.net/dfLf9zkm/。
不同之处在于,在 ng-repeat 中,我对每个测试都有一个 ng-controller,所以每次我调用 ng-method 时,它只会影响我所在的行,而不影响其他行。类似的东西
<div ng-app="app" ng-controller="Controller">
<table>
<tr>
<th>Type</th>
<th>Ponderation</th>
</tr>
<tr ng-repeat="test in tests track by test.id" ng-controller="TestRow">
<td><select ng-model="test.type" ng-options="type.id as type.type disable when type.id == 2 && hasExam && idExam!=test.id for type in types" ng-change="checkTests()"></select>
</td>
<td>{{test.ponderation}}%</td>
</tr>
</table>
</div>
如果我使用 TestRow 控制器中的方法更改 $scope.hasExam 的值,它只会影响该行而不影响其余行。我该怎么做?
【问题讨论】:
-
绝对不需要另一个控制器
TestRow。主控制器可以通过ng-change="checkTests(test)"处理 ng-change。如果这没有帮助,您能否说明hasExam的目的是什么? -
你说
How can I do it?我听不懂?请以更好的方式解释您的期望?另外,@Protozoid 提到了一个有效点,为什么要为每一行创建controller,并将其放在ng-repeat -
代码已经以这种方式制作了。 HasExam 检查该期间是否已经有考试。所有的测试都是在工厂获得的。在示例中,我给出了硬编码测试,但显然在实际情况下它并不能以这种方式工作。另一个控制器执行一些方法来更新和管理为处理日期字段而创建的日期选择器插件
标签: angularjs ng-options ng-controller