48

我正在尝试在我的 ng-repeat 中为我的 div 设置一个动态 id。让我举个例子。

<div id="$index" ng-repeat="repeat in results.myJsonResults">
    <div id="$index" ng-click="saveID($index)" ng-repeat="subRepeat in results.myJsonResults.subresults">
</div>

我的问题是,当我单击我的子 div 时,我想获取我的父 ID 名称,但看起来 angular 没有将 ID 正确设置为 div。是否可以在这个概念中设置动态 ID?

PS:过去,我尝试在我的控制器上创建一个计数器方法并设置一个索引,但事实证明,angular 只识别此 ID 的最后一个值。

4

4 回答 4

72

要回答您的问题,请尝试以下操作:

<div id="{{$index}}" ...>

虽然以上应该可以工作,但这可能不是你真正想要的(!)。请注意,AngularJS 很少通过 id 引用元素来操作元素。

您应该专注于您的模型,声明式描述 UI,让 AngularJS 完成其余的工作,而无需“手动”进行低级 DOM 操作。

于 2013-03-08T19:33:52.943 回答
35

我能想到的一个用例是将<label>元素与其各自的<input>元素相关联,如http://jsfiddle.net/YqUAp/中所示

应用有一个 pkozlowski.opensource的方法

<label for="{{ 'textField-' + $index }}">Option {{ $index }}</label>
<input type="text" id="{{ 'textField-' + $index }}" ng-model="field"/>

虽然我不确定这是否是最有效的方法。(即使只是为了可读性)

于 2013-09-11T21:15:46.183 回答
8
<div id="{{$index}}" ...>

效果很好,但是如果 - 例如 - subRepeat 会有一个 id 字段,您也可以使用重复的字段放置一个动态 id。那将是:

<div id="subRepeat{{subRepeat.id}}" ...>

这会将像 subRepeat1, subRepeat2, ... 这样的 id 放在重复的 div 上

于 2015-05-21T08:09:43.247 回答
1

你需要在你的对象中保存索引

results = { myJsonResults : [ 
    { name: "abc", id: 1, subResults: [
                               { subName: "123", id: 1 },
                               { subName: "456", id: 2 }] }
    { name: "xyz", id: 2, subResults: [
                               { subName: "789", id: 1 },
                               { subName: "098", id: 2 }] }
                            ] };

此外,您的重复指的是断开它们的结果,而是使用 thisResult:

<div id="thisResult.id" ng-repeat="thisResult in results.myJsonResults">
    {{ thisResult.name }}
    <div id="subResult.id" ng-click="saveID(subResult.id)" ng-repeat="subResult in thisResult.subResults"> {{ subResult.subName }} </div>
</div>
于 2017-04-11T03:03:59.543 回答