如何为ng-repeat

时间:2015-06-17 15:50:33

标签: javascript html angularjs angularjs-ng-repeat angularjs-track-by

如何使用不同(唯一)的hashkey或id为ng-repeat创建对象的新实例?我尝试使用"跟踪",但无法让它工作。

我的代码如下:

对于表格中的每一行(可能是5,10 ......行),我想显示存储在此列表中的同一组复选框:

    $scope.list_of_checkboxes = 
[
    {
      name: "ch1",
      properties:[{t:"text1",v:0},{t:"text2",v:0},{t:"text3",v:0}]
    },
     {
      name: "ch2",
      properties:[{t:"text1",v:0},{t:"text2",v:0},{t:"text3",v:0}]
    }
 ];

选中复选框后,我将使用此库在$scope.table_rows.objects中存储复选框对象: http://vitalets.github.io/checklist-model/

$scope.table_rows=[{row_1:'row # 1', objects:[]},{row_2: 'row # 2',objects:[]},{row3:'row # 3',objects:[]}]

显示复选框并且运行正常。但是,当我在$ scope.table_rows.objects中存储已选中复选框的对象时,它们都具有相同的哈希键。这就是问题。因为,当我显示 properties:[{t:"text1",v:0},{t:"text2",v:0},{t:"text3",v:0}]作为输入字段并更新其中一个属性值,例如table_rows[key].objects[1].v = 30,将相同的值复制到存储在其他行中的同一对象的属性中。

我试图返回新实例(但它不起作用):

$scope.list_of_checkboxes = function (){ 

 return ([
    {
      name: "ch1",
      properties:[{t:"text1",v:0},{t:"text2",v:0},{t:"text3",v:0}]
    },
     {
      name: "ch2",
      properties:[{t:"text1",v:0},{t:"text2",v:0},{t:"text3",v:0}]
    }
 ])
}

1 个答案:

答案 0 :(得分:0)

不是完整的实现,但您可以尝试使用$ id(obj)跟踪:

HTML:

<div ng-app="myApp" ng-controller="Ctrl">
<table>
    <tr ng-repeat=" row in rows track by row.name">
<td ng-repeat="role in roles track by $id(role)" >
  <input type="checkbox" checklist-model="user.roles" checklist-value="$id"/> {{role.name}},{{$id}}
        </td>
        </tr>
</table>
<br><br><br>
user.roles {{ user.roles | json }}
</div>

JavaScript:

var app = angular.module("myApp", ["checklist-model"]);

app.controller('Ctrl', function($scope) {
$scope.rows=[{
    name:'first'
},{
    name:'second'
},{
    name:'third'
}];
$scope.roles =[
{
  name: "ch1"
},
 {
  name: "ch2"    }
];

$scope.user = {
roles: []
};
});

演示:http://jsfiddle.net/FC9c7/78/