Angular에서 여러 필드로


382

각도에서 여러 필드를 동시에 사용하여 정렬하는 방법은 무엇입니까? 예를 들어 그룹 별 및 하위 그룹 별 주먹

$scope.divisions = [{'group':1,'sub':1}, {'group':2,'sub':10}, {'group':1,'sub':2},{'group':1,'sub':20},{'group':2,'sub':1},
    {'group':2,'sub':11}];

나는 이것을 이것을 표시하고 싶었다.

그룹 : 하위 그룹

1-1

1-2

1-20

2-1

2-10

2 ~ 11

<select ng-model="divs" ng-options="(d.group+' - '+d.sub) for d in divisions | orderBy:'group' | orderBy:'sub'" />

답변:


659

이것을 참조하십시오 :

http://jsfiddle.net/JSWorld/Hp4W7/32/

<div ng-repeat="division in divisions | orderBy:['group','sub']">{{division.group}}-{{division.sub}}</div>

137
orderBy:['-group','sub']에 의해 정렬 group역순으로.
Dmitriy

1
그룹 필드가 orderBy List에서 첫 번째 우선 순위를 갖습니까?
luchosrock

5
@ luchosrock, 예, 예상대로입니다. 제공된 jsfiddle을 사용하면 제공된 정렬 필드의 정렬 우선 순위가 왼쪽에서 오른쪽으로 쉽게 확인됩니다.
Patrick Refondini

2
선택적 reverseOrder 매개 변수는 param 표현식처럼 배열을 지원하지 않지만,이를 생략하고 대신 각 배열 항목에 대해 정렬 순서를 제공하여 개별적으로 반대로 (또는 반대로) 정렬 할 수 없습니다. 예 : orderBy : [ 'group', '-sub']은 정상적인 방식으로 그룹별로 정렬 한 다음 역순으로 하위 정렬합니다. 이 방법으로 복잡한 조합을 얻을 수 있습니다.
Daniel Nalbach

1
배열 항목에 부울 속성을 제공 한 다음 첫 번째 옵션으로 사용하여 상점에서 우선 순위를 시뮬레이션했습니다. 예 : orderBy : [ '-featured', 'title']. 추천 기능 항목이 알파벳순으로 정렬 된 다음 나머지 항목이 알파벳순으로 나열되었습니다.
Daniel Nalbach


21
<select ng-model="divs" ng-options="(d.group+' - '+d.sub) for d in divisions | orderBy:['group','sub']" />

여러 orderBY 대신 사용자 배열


5

각도에서 'orderBy'필터를 사용하여 정렬을 수행 할 수 있습니다.

두 가지 방법 : 1.보기에서 2. 컨트롤러에서

  1. 보기에서

통사론:

{{array | orderBy : expression : reverse}} 

예를 들면 다음과 같습니다.

 <div ng-repeat="user in users | orderBy : ['name', 'age'] : true">{{user.name}}</div>
  1. 컨트롤러에서

통사론:

$filter.orderBy(array, expression, reverse);

예를 들면 다음과 같습니다.

$scope.filteredArray = $filter.orderBy($scope.users, ['name', 'age'], true);

5

AngularJs 필터를 수행하는 두 가지 방법이 있습니다. 하나는 {{}}을 사용하는 HTML과 하나는 실제 JS 파일입니다 ...

다음을 사용하여 문제를 해결할 수 있습니다.

{{ Expression | orderBy : expression : reverse}}

HTML에서 사용하거나 다음과 같은 것을 사용하는 경우 :

$filter('orderBy')(yourArray, yourExpression, reverse)

반전은 마지막에 선택 사항이며 부울을 허용하며 true이면 배열을 뒤집을 수있는 매우 편리한 방법입니다.



0

객체의 여러 열 / 속성별로 정렬하는이 편리한 부분을 작성했습니다. 연속 된 열 클릭마다 코드는 마지막으로 클릭 한 열을 저장하고이를 클릭하는 열 문자열 이름의 목록에 추가하여 sortArray라는 배열에 배치합니다. 내장 Angular "orderBy"필터는 단순히 sortArray 목록을 읽고 저장된 열 이름 순서로 열을 정렬합니다. 따라서 마지막으로 클릭 한 열 이름이 기본 정렬 필터가되고, 이전에 클릭 한 필터는 우선 순위가 높은 다음에 클릭됩니다. 역순은 모든 열 순서에 한 번에 영향을 미치며 전체 배열 목록 세트에 대해 오름차순 / 내림차순으로 전환합니다.

<script>
    app.controller('myCtrl', function ($scope) {
        $scope.sortArray = ['name'];
        $scope.sortReverse1 = false;
        $scope.searchProperty1 = '';
        $scope.addSort = function (x) {
            if ($scope.sortArray.indexOf(x) === -1) {
                $scope.sortArray.splice(0,0,x);//add to front
            }
            else {
                $scope.sortArray.splice($scope.sortArray.indexOf(x), 1, x);//remove
                $scope.sortArray.splice(0, 0, x);//add to front again
            }
        };
        $scope.sushi = [
        { name: 'Cali Roll', fish: 'Crab', tastiness: 2 },
        { name: 'Philly', fish: 'Tuna', tastiness: 2 },
        { name: 'Tiger', fish: 'Eel', tastiness: 7 },
        { name: 'Rainbow', fish: 'Variety', tastiness: 6 },
        { name: 'Salmon', fish: 'Misc', tastiness: 2 }
        ];
    });
</script>
<table style="border: 2px solid #000;">
<thead>
    <tr>
        <td><a href="#" ng-click="addSort('name');sortReverse1=!sortReverse1">NAME<span ng-show="sortReverse1==false">&#9660;</span><span ng-show="sortReverse1==true">&#9650;</span></a></td>
        <td><a href="#" ng-click="addSort('fish');sortReverse1=!sortReverse1">FISH<span ng-show="sortReverse1==false">&#9660;</span><span ng-show="sortReverse1==true">&#9650;</span></a></td>
        <td><a href="#" ng-click="addSort('tastiness');sortReverse1=!sortReverse1">TASTINESS<span ng-show="sortReverse1==false">&#9660;</span><span ng-show="sortReverse1==true">&#9650;</span></a></td>
    </tr>
</thead>
<tbody>
    <tr ng-repeat="s in sushi | orderBy:sortArray:sortReverse1 | filter:searchProperty1">
        <td>{{ s.name }}</td>
        <td>{{ s.fish }}</td>
        <td>{{ s.tastiness }}</td>
    </tr>
</tbody>
</table>

0

정렬 파이프를 만들었습니다. 여러 값으로 정렬하여 문자열과 문자열 배열을 모두 허용합니다. Angular에서 작동합니다 (AngularJS 아님). 문자열과 숫자 정렬을 모두 지원합니다.

@Pipe({name: 'orderBy'})
export class OrderBy implements PipeTransform {
    transform(array: any[], filter: any): any[] {
        if(typeof filter === 'string') {
            return this.sortAray(array, filter)
        } else {
            for (var i = filter.length -1; i >= 0; i--) {
                array = this.sortAray(array, filter[i]);
            }

            return array;
        }
    }

    private sortAray(array, field) {
        return array.sort((a, b) => {
            if(typeof a[field] !== 'string') {
                a[field] !== b[field] ? a[field] < b[field] ? -1 : 1 : 0
            } else {
                a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0
            }
        });
    }
}

1
추신 : 실제로 내 의견으로는 아무도 실제 질문에 대답하지 않았습니다. AngularJS가 아닌 Angular에 대한 원인이었습니다. 내 솔루션은 Angular 2에서 시작합니다. Angular 7.2.15에서 테스트
Andris

a)이 질문을 언제 받았는지, b) Angular 2가 처음 발표 된 시점을 고려해야합니다.
Nick

@andris 어딘가에서 호스팅되는 엔드 투 엔드 코드 예제가 있습니까?
롤링 스톤

미안하지만, 아니 :(
Andris

-8

최종 사용자에게는 정렬이 복잡하지 않아야합니다. 나는 항상 그룹과 하위 그룹을 정렬하는 것이 이해하기 조금 복잡하다고 생각했습니다. 기술적 인 최종 사용자라면 괜찮을 것입니다.


이것은 관련 "댓글"도 아닙니다. 질문에 대한 답변이 아닙니다
Afshin Moazami

GUI 개발을 할 때 현재 접근 방식이 최선인지 스스로에게 묻는 것이 잘못입니까? 최종 사용자 경험은 나와 관련이 있습니다
Jens Alenius

여러 속성으로 정렬하면 사용자가 조직을 더 쉽게 이해할 수있는 시나리오가 많이 있습니다. 본질적으로 사물을 범주로 그룹화합니다.
Owen Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.