порядок повторения по строковому значению - PullRequest
0 голосов
/ 10 сентября 2018

Мне было интересно, можно ли упорядочить список по строке, например,

Я хочу, чтобы все Bear были первыми в моем ng-повторении на основе item.type.

Данные:

$scope.Reindeers = [{
    "name": "Vixen",
    "type": "Bear"
},
{
    "name": "Prancer",
    "type": "Dog"
},
{
    "name": "Dancer",
    "type": "Cat"
},
{
    "name": "Rudolph",
    "type": "Bear"
}]

AngularJS, например

<div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: 'type == Bear'"></div>

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Самое простое решение - просто использовать алфавитный порядок по умолчанию.

Таким образом, поскольку медведь начинается с буквы b, достаточно просто написать:

 <div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: 'type'">{{Deer}}</div>

См .: https://jsfiddle.net/nfje5qo2/6/

0 голосов
/ 10 сентября 2018

Поскольку ваш массив хранится в ключе: значение. Это легко сортировать. Вам не нужно писать какой-либо дополнительный метод или функцию. Просто поместите конвейер с именем filter в угловые термины в ваш HTML, как показано ниже.

<div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: 'type'">{{Deer}}</div>
0 голосов
/ 10 сентября 2018

Аргументом orderBy может быть функция: https://docs.angularjs.org/api/ng/filter/orderBy#orderBy-arguments

Напишите функцию, которая возвращает значение, используемое для сортировки. Самый высокий приоритет должен возвращать самое низкое значение:

$scope.orderByBears = function(item) {
  switch(item.type) {
    case "Bear":
      return -10;
    /*case "Dog":
      return -5;*/
    default:
      return 0;
  }
}

Затем используйте эту функцию как orderBy:

<div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: orderByBears"></div>

https://jsfiddle.net/jnokyfx9/2/

...