可以访问ng-repeat创建的范围项吗?

时间:2015-08-11 01:06:53

标签: javascript angularjs

我认为ng-repeat会为数组/对象中的每个元素创建一个新范围。

是否可以访问ng-repeat从控制器创建的这些新范围?例如,如果您知道索引?

非常感谢任何帮助。

3 个答案:

答案 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-repeatJSFiddle

答案 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>