修改由ng-init指令中的ng-repeat迭代的数组中的对象

时间:2016-10-14 04:29:57

标签: angularjs

我正在尝试在ng-repeat使用的数组内的对象上设置position属性。

<div ng-repeat="item in items track by $index" ng-init="pos = $index + 1; item.position = pos">

<span>{{pos}}</span>

</div>

最初它设置属性很好,但是,只要在模型之后重新编译HTML(我在数组中添加/删除/移动元素),就会更改pos变量,并且显示正确的位置。但是它不会更新item.position!

2 个答案:

答案 0 :(得分:1)

属性的分配确实不属于您的模板。理想情况下,您应该在控制器中分配position属性。你可以在你的控制器中使用这样的东西

$scope.$watchCollection('items', function() {
    angular.forEach($scope.items, function(item, idx) {
        item.position = idx + 1;
    });
})
然而,我真的质疑这样做的必要性。项目在数组中的位置提供了您需要的所有信息。

演示〜http://plnkr.co/edit/H5JbsABEdceSXENFFBBO?p=preview

答案 1 :(得分:1)

有趣的黑客:

<li ng-repeat="item in items track by $index">
  {{item.position=$index+1}}
    <span>{{item.position}}</span>
</li>

不会在生产中建议

DEMO