Мне нужно получить текущий объект из 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}}"
благодаря
Вы можете просто использовать 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>
Это просто 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
уже был установлен в родительской области.
limitTo: length:start
filter