Я пытаюсь использовать ng-модель «внутри» директивы ng-repeat, которая сама вложена в директиву ng-repeat.с использованием ng-модели в вложенных директивах ng-repeat
Следующий jsfiddle демонстрирует мою проблему и мои две попытки ее решения.
мой контроллер определяется следующим образом:
var mod = angular.module('TestApp', []);
mod.controller('TestCtrl', function ($scope) {
var machine = {};
machine.noteMatrix = [
[false, false, false],
[false, true, false],
[false, false, false]
];
$scope.machine = machine;
// ...
});
1.
<table>
<thead>
<tr>
<th>--</th>
<th ng-repeat="no in machine.noteMatrix[0]">{{$index+1}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="track in machine.noteMatrix">
<td>--</td>
<td ng-repeat="step in track">
<input type="checkbox" ng-model="track[$index]"> {{step}}
</td>
</tr>
</tbody>
</table>
Первый пример/попытка обновляет machine.noteMatrix внутри контроллера, но каждый раз, когда нажимается флажок, angularjs отображает t он следующее сообщение об ошибке дважды в консоли JavaScript:
Duplicates in a repeater are not allowed. Repeater: step in track
, а иногда он также будет отображать сообщение об ошибке:
Duplicates in a repeater are not allowed. Repeater: no in machine.noteMatrix[0]
2.
<table>
<thead>
<tr>
<th>--</th>
<th ng-repeat="no in machine.noteMatrix[0]">{{$index+1}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="track in machine.noteMatrix">
<td>--</td>
<td ng-repeat="step in track">
<input type="checkbox" ng-model="step"> {{step}}
</td>
</tr>
</tbody>
</table>
Второй пример/попытка Считывает данные корректно из noteMatrix, и никакие ошибки не отображаются на консоли javascript при проверке/снятии флажков. Однако изменение их состояний не обновляет machine.noteMatrix в контроллере (нажмите кнопку «Показать матрицу», чтобы увидеть матрицу в jsfiddle).
Может ли кто-нибудь пролить свет на это? :)
Свойство $ scope изменяется при использовании ng-repeat, поэтому попробуйте использовать $ parent.track [$ index] вместо этого, чтобы получить доступ к внешней области. –
с использованием $ parent.track [$ index] вместо отслеживания [$ index] приводит к тому, что те же 'Duplicates в повторителе не разрешены. Повторитель: шаг в ошибке трека –
в новой угловой ошибке есть два указательных пункта https://github.com/angular/angular.js/blob/master/CHANGELOG.md –