2015-05-27 1 views
-1

У меня есть задача сделать имя пользователя в первую очередь списком. Heres примерКак сделать первый элемент в ng-repeat

$scope.items = [John,Bob,Tanya,Owen,George]; 

<div ng-repeat="item in items"></div> 

Результат будет:

John 
Bob 
Tanya 
Owen 
George 

Как я могу сделать, что Оуэн будет первым, как:

Owen 
John 
Bob 
Tanya 
George 
+1

Разве вы не можете просто изменить массив ($ scope.items) на [Owen, Джон, Боб, Таня, Джордж]? – rmuller

+2

Что определят этот 'порядок'? – christiandev

+0

нет, у меня есть список имен с сервера – Supermegasharky

ответ

0

Вы можете использовать orderBy , с expressi на.

Если у вас JSON объект, подобный этому ....

$scope.itemsWithOrder = [{ 
    "name": "Owen", 
    "order": 1 
    }, { 
    "name": "Dave", 
    "order": 3 
    }, { 
    "name": "Ken", 
    "order": 2 
    }, { 
    "name": "John", 
    "order": 4 
    }]; 

Вы могли бы использовать order свойство сортировки коллекции.

<div ng-repeat="itemw in itemsWithOrder | orderBy :'order'"> 
    {{itemw.name}} - {{itemw.order}} 
</div> 

Это даст вам выход ... (вы можете также обратный выход с -, давая orderBy :'-order')

Оуэн - 1

Кен - 2

Dave - 3

John - 4

Я знаю, что это не помогает с объектом, который у вас есть, но вы можете получить альтернативный объект с сервера?

+0

theres проблема, имена приходят без каких-либо ограничений, чтобы определить имя, что мне нужно, и я уже использую его сортировку по алфавиту – Supermegasharky

+0

Вы можете * hardcode * имя, но это было бы грязно. Я думаю, что вам лучше сортировать по алфавиту или создать массив объектов на основе вашей коллекции, давая * Owen * 'Order' из 1 ***, если существует ***, в противном случае дать первому человеку в список 1? – christiandev

0

Fiddle

Вы посмотрите на скрипке я Приведенная выше можете. Я создал функцию, которая принимает массив и строку для поиска. Если он найден, он принимает к сведению его индекс, а затем потом перемещает его в начало массива и удаляет старый.

var app = angular.module('myApp', []); 
app.controller('myController', function($scope){ 
    $scope.items = ["John","Bob","Tanya","Owen","George"]; 

    $scope.fixArray = function(array, name){ 
     angular.forEach(array, function(a){ 
      if (a == name){ 
       $scope.index = array.indexOf(a); 
      } 
     }); 
     array.unshift(array[$scope.index]); 
     array.splice($scope.index + 1, 1); 
    }; 

    $scope.fixArray($scope.items, "Owen"); 
}); 
+0

это хорошая функция, ty. Но у меня есть orderBy, поэтому я должен завораживать массив после orderBy – Supermegasharky

0

Пожалуйста, проверьте этот http://plnkr.co/edit/qcj8lLuUppYzS9ytW0WR?p=preview

просто:

<div ng-repeat="item in items| orderBy">{{item}}</div> 

контроллер

var app= angular.module('app', []); 
app.controller('ctrl', function($scope) { 
    $scope.items = ['John','Bob','Tanya','Owen','George']; 
}); 
+0

Работает ли он для вас – User2

Смежные вопросы