Angular - Получить повторяющийся объект

0

Мне нужно получить текущий объект из ng-repeat на ng-click, я не могу использовать $ index, потому что я использую orderBy, и поэтому он дает мне неправильный индекс относительно объекта области. Идеализм Я хочу, чтобы иметь возможность щелкнуть по объекту (миниатюру) и иметь $ scope.activePerson получить все эти значения объектов.

Мои данные структурированы следующим образом:

      [
        {
          'name': 'john'
        },
        {
          'name': 'toby'
        },
        {
          'name': 'sarah'
        }
      ]

Это очень упрощено, мои реальные объекты имеют 30+ KV пары и подобъекты. Есть 10 объектов, которые я повторяю (в партиях по 4).

Мой текущий HTML:

.item.fourth(ng-repeat="person in people | orderBy:'-name' " ng-show="$index <= 3" nid="{{person.guid}}"

благодаря

  • 0
    не беспокойтесь об индексе .... просто передайте весь объект в функцию ng-click. Также взгляните на limitTo: length:start filter
Теги:
angularjs-ng-repeat

2 ответа

1
Лучший ответ

Вы можете просто использовать orderBy и скопировать текущий объект из ng-repeat, см. Этот plunkr. Соответствующий код:

контроллер

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.stuff = [
        {
          'name': 'john'
        },
        {
          'name': 'toby'
        },
        {
          'name': 'sarah'
        }
      ];

    $scope.setActivePerson = function (obj) {
      $scope.activePerson = obj;
    };
});

Посмотреть

<body ng-controller="MainCtrl">
    <div ng-repeat="thing in stuff | orderBy: 'name'">
      <input type="radio" ng-click="setActivePerson(thing)" />
      {{ thing.name }}
    </div>
    <br />
    <div ng-model="activePerson">Active: {{ activePerson.name }}</div>
  </body>
  • 0
    Это не сработает, попробуйте выбрать Сару, вместо этого Тоби будет активным человеком.
  • 0
    Вы правы, проверьте обновленный plunkr: plnkr.co/edit/UPwzeJ7iXcP1IRUB09BF Вам просто нужно скопировать человека в activePerson.
3

Это просто person в ng-repeat="person in people";

Я не уверен, какая уценка вы используете, у вас определенно нет html, но вы хотите что-то вроде:

<div 
     ng-repeat="person in people | orderBy:'-name' " 
     ng-show="$index <= 3" 
     nid="{{person.guid}}" 
     ng-click="activePerson = person">
</div>

Обратите внимание, что ng-repeat создает activePerson область, поэтому вы хотите, чтобы activePerson уже был установлен в родительской области.

  • 0
    Это был нефрит. Спасибо, это тоже решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню