のオブジェクトに配列を追加すると、奇妙な動作になると私は信じていますng-repeat
。
「Duplicates in a repeater are not allowed
」エラーのため、使用してtrack by $index
いますが、行を表示/非表示にしようとすると、追加されたすべてが切り替わります。インデックスをに渡し、ng-click
値を直接設定しようとしましたng-click
ここにいくつかのサンプルコードとjsFiddle demonstration
HTML の抜粋:
<tbody ng-repeat="person in object track by $index" ng-show="person.visible">
<tr>
<td>{{ person.name }}</td>
<td>{{ person.age }}</td>
<td>
<a href ng-click="togglePerson($index)">Hide</a>
</td>
<!-- <td>
<a href ng-click="person.visible = !person.visible">Hide</a>
</td> -->
</tr>
</tbody>
Javascript:
myApp.controller('myController', function ($scope) {
$scope.init = function () {
$scope.object = [{
name: "Billy",
age: 21,
visible: true
}];
$scope.newEntry = {
name: 'Ralph',
age: 16,
visible: true
};
};
$scope.addPerson = function () {
$scope.object.push($scope.newEntry);
};
$scope.togglePerson = function (index) {
console.log(index); // Index is being passed properly
$scope.object[index].visible = !$scope.object[index].visible;
};
});
過去にリピーター内でかなりの数の可視性の切り替えを行いましたが (決して を使用したtrack by $index
ことはありません)、どこで間違ったのかを判断できないようです。これは追跡/配列比較にも関連していますか?
編集
明確にするために、私のデモンストレーションは、このコードの使用方法ではありません。私は実際に2行目の可視性を切り替えています。非表示に切り替えると元に戻すことができないため、私のデモには欠陥があることを私は知っています。