使用AngularJS有没有办法在没有javascript的模型上从ng-repeat双向绑定$ index?

时间:2015-07-09 09:55:58

标签: angularjs angularjs-ng-repeat ng-repeat

我想有一个像这样的dom元素列表:

<div ng-repeat="element in elements track by $index" 
     data-index="$index" ng-init="element.order = $index"> </div>
If the elements are 3 then
elements[0].order = 0;
elements[1].order = 1;
elements[2].order = 2;

我试图在字段'order'上的每个元素上绑定$ index。显然,数据索引不是双向绑定,并且在我的代码中用新对象替换元素后,ng-init效果消失了。我希望能够根据DOM顺序自动更改元素的“顺序”字段(例如,如果我有一个拖放重新排序机制)。如何在没有Javascript的情况下通过在HTML中使用角度绑定来完成这项工作?

3 个答案:

答案 0 :(得分:1)

我在git(https://github.com/angular/angular.js/issues/12312)中提出了这个问题,而有角度的团队回答说有核心支持:

ng-attr-xxx可用于将html订单字段与模型订单字段

绑定

所以这个:

<div ng-repeat="element in elements track by $index" ng-attr-xxx="element.order = $index"> </div>

正在做我想做的事。

:)

答案 1 :(得分:0)

也许这就是你想要的东西?

<div ng-repeat="element in elements track by $index | orderBy:'order'" ng-model="element.order" ng-init="element.order = $index"></div>

使用ng-init被认为是不好的,所以我不建议这样做。你应该在控制器中初始化它。

答案 2 :(得分:0)

为什么需要绑定它?您始终可以使用indexOf

获取数组中元素的索引
var elements = [100,200,300,400];
var index = elements.indexOf(200); // 1

如果您需要HTML中的值,您也可以在那里使用

<div ng-show="elements.indexOf(element) == 3">