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

Is there a way to 2-way bind $index from ng-repeat on a model without javascript, using AngularJS?

我想要一个包含 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。显然 data-index 不是双向绑定,在我的代码中用新对象替换元素后 ng-init 效果消失。我希望能够根据 DOM 顺序自动更改元素的 'order' 字段(例如,如果我有拖放重新排序机制)。如何在没有 Javascript 的情况下仅通过在 HTML 中使用 angular 绑定来完成此操作?

也许这就是您想要的?

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

虽然使用 ng-init 被认为是不好的,但我不建议这样做。您应该在控制器中对其进行初始化。

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

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

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

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

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

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

所以这个:

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

正在做我想做的事情。

:)