orderBy в ngRepeat с использованием другого свойства переменной

Можно ли сортировать элементы из одного массива на основе другой переменной, используя только orderBy и не добавляя свойство count к элементам в массиве?

Допустим, у меня есть массив и карта в контроллере:

$scope.x = [{no:1,name:"a"},
    {no:2,name:"b"},
    {no:3,name:"c"}];

$scope.y = { 1: [1],
    2: [1,2,3],
    3: [1,2] };

и html будет выглядеть так:

<div ng-repeat="i in x | orderBy: y[i.no].length">
  {{i.no}}
  {{ y[i.no] }}
  {{ y[i.no].length }}
</div>

выход:

1 [1] 1
2 [1,2,3] 3
3 [1,2] 2

но должно быть:

1 [1] 1
3 [1,2] 2
2 [1,2,3] 3

person Panagiotis    schedule 23.07.2017    source источник
comment
Вам помог ответ?   -  person dev8080    schedule 24.07.2017
comment
да спасибо dev8080   -  person Panagiotis    schedule 24.07.2017


Ответы (1)


Вы можете использовать функцию предиката, чтобы указать ваше условие.

Попробуй это:

<div ng-repeat="i in x | orderBy: findOrder">
    {{i.no}}
    {{ y[i.no] }}
    {{ y[i.no].length }}
</div>

А также:

$scope.findOrder = function(elem){
      console.log(elem.no);
      return $scope.y[elem.no].length;
 }

рабочая скрипка.

person dev8080    schedule 23.07.2017