Доступ к внешнему $index, когда ng-repeat вложен в AngularDart

Рассмотрим следующие вложенные директивы ng-repeat:

  <tr ng-repeat="r in SomeExpr1">
    <td ng-repeat="c in SomeExpr2">
      <p>c index is {{$index}}, r index is {{???}}</p>
    </td>
  </tr>

Как я могу получить доступ к $index внешней ng-repeat (т. е. той, что в родительской области скрыта внутренней ng-repeat областью $index)?


person Patrice Chalin    schedule 13.02.2014    source источник
comment
Есть ли способ сделать это в AngularDart 1.0.0? Использование $parent приводит к NoSuchMethodError, поскольку он пытается найти геттер экземпляра в компоненте.   -  person Scotty Waggoner    schedule 11.10.2014


Ответы (2)


Как отметил @Randal Schwartz в этот пост $parent делает свое дело.

<div ng-controller='demo-ctrl'>
  <div ng-repeat="row in ctrl.matrix">
    <div ng-repeat="column in row">
      <span>outer: {{$parent.$index}} inner: {{$index}}</span>
    </div>

  </div>
</div>
person Günter Zöchbauer    schedule 19.02.2014
comment
Может кто-нибудь проверить, работает ли это до сих пор? $parent возвращает для меня значение null. - person Nawaf Alsulami; 24.04.2014
comment
Какую версию Angular вы используете? - person Günter Zöchbauer; 24.04.2014
comment
угловой 0.10.0 . - person Nawaf Alsulami; 24.04.2014

Вам нужен ng-init из Angular.js. К сожалению, это еще не портировано, но это выглядело бы так, если бы работало:

<script>
  function Ctrl($scope) {
    $scope.list = [['a', 'b'], ['c', 'd']];
  }
</script>
<div ng-controller="Ctrl">
  <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
    <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
       <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
    </div>
  </div>
</div>

(через http://docs.angularjs.org/api/ng/directive/ngInit)

person Randal Schwartz    schedule 18.02.2014
comment
ng-init не планируется github.com/angular/angular.dart/issues/128, но должно быть легко добавить пользовательскую директиву, которая сохраняет это значение, чтобы сделать его повторно используемым во внутреннем повторе. - person Günter Zöchbauer; 18.02.2014
comment
Что ж, я отзываю свой запрос на ng-init, хотя это немного упрощает демонстрацию. :) Рад просто поместить мой init в свой контроллер и использовать $parent для перехода к следующему внешнему $index. Дело закрыто. - person Randal Schwartz; 19.02.2014
comment
Я действительно не знаю об angular.dart, но в простом angular: P вам действительно следует использовать $parent.$index, поскольку это не совсем безопасно. Пример @RandalSchwartz безопаснее ... Если вы добавите ng-if внутри цикла, вы получите перепутанный индекс $, проверьте: plnkr.co/52oIhLfeXXI9ZAynTuAJ - person Gonz; 10.12.2014