2015-07-21 2 views
0

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

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

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

Это очень упрощена, мои реальные объекты имеют 30+ пары КВ и подобъектов. Есть 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 – charlietfl

ответ

1

Вы можете просто использовать OrderBy и скопировать текущий объект из нг-повтора, see this 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

Это не сработает, попробуйте выбрать sarah, toby будет активным человеком. – ryeballar

+0

Вы в порядке, проверьте обновленный plunkr: http://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> 

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

+0

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