我认为ng-repeat会为数组/对象中的每个元素创建一个新范围。
是否可以访问ng-repeat从控制器创建的这些新范围?例如,如果您知道索引?
非常感谢任何帮助。
答案 0 :(得分:8)
检查此演示的控制台:JSFiddle。
console.log
范围,有两个属性$$childHead
和$$childTail
。它们是由ng-repeat
创建的第一个和最后一个子范围。
获取第一个子范围$$childHead
后,您可以遍历以通过ng-repeat
和$$nextSibling
获取其他$$prevSibling
范围对象。
注意:这些属性以
$$
开头,表示它们是private
角度变量。我想它们不打算直接使用。
如果您使用ng-repeat
之类的<div ng-repeat="item in items"></div>
,则可以使用ng-click="dealWithItem(item, $index)"
将此项目传递给控制器中定义的函数:
$scope.dealWithItem = function (item, index) {
// console.log(item);
}
它也适用于嵌套ng-repeat
:JSFiddle。
答案 1 :(得分:3)
当我尝试Joy的回答时,我在控制台上的item变量未定义。但是有一种更简单的方法可以做到。
HTML:
<tr ng-repeat="name in names">
<button class="btn btn-info btn-sm pull-right" ng-click="dealWithItem()">{{name.first_name}}</button>
</tr>
控制器:
$scope.dealWithItem = function () {
console.log(this.name.first_name);
}
this.name将具有与$ scope.names相关联的所有属性。
答案 2 :(得分:0)
您可以使用$parent
作为函数的参数来访问这些范围:
<div ng-repeat="item in items">
<div ng-click="doSomethingWithItem(item, $parent)"></div>
</div>