2015-01-27 2 views
0

orderBy 테이블의 순서는 잃어 버리고 $index 값은 원래 배열이 아닌 정렬 된 배열의 값입니다.각도 다음에 중간 색인을 얻으십시오.

- apple $index = 0 
- banana $index = 1 
- orange $index = 2 
- potato $index = 3 

을 그리고 당신이 지금 orange($index = 2)apple($index = 0) 사이에 선택 항목을 다중 싶은 경우에 당신이 생각할 수 있습니다 : 그래서 당신이 UI에 orderBy 후, 당신의 ng-repeatitems 배열 ['orange', 'banana','potato','apple']를 전달하면이처럼 표시됩니다 작동 할 것입니다 :

for(index = 0; index <= 2; index++) 
    console.log(items[index]) 

잘못된 것입니다, 그것은 인쇄 할 것입니다 : [orange, banana, potato]; not [apple, banana, orange].

주문 후 표시된 배열의 간격 인덱스를 얻는 방법을 찾고 있습니다. 어떤 아이디어입니까?

편집 :는 UI에 당신이 items을 분류했다고 가정 한 다음 사과를 선택 명확히하고 오렌지 선택 :

✓ apple 
    banana 
✓ orange 
    potato 

내가 방법을 선택 그 둘 사이에서 items을 알고 싶어를, 그 사이에 모두를 선택할 수 있도록 banana입니다.

<tr ng-repeat="item in items | index | orderBy:'Store.storeName'"> 

을 한 후 HTML에 당신은 $ 지수 대신 item.index를 사용할 수 있습니다

+0

$ index 대신 item을 사용하고 $ scope.items.indexOf (item)를 사용하여 원본 색인을 얻을 수 있습니다. 작업 예제에서는 다음 링크로 이동할 수 있습니다. 에 http : // jsfiddle.net/0uksemjs/ – chandings

+0

보기에서 필터를 사용하면 제시 목적으로 데이터를 형식화/수정합니다. 필터링 된/정렬 된 배열의 인덱스를 사용해야하는 이유에 대해 자세히 설명 할 수 있습니까? 그리고 프리젠 테이션 목적 이상의 것이라면'$ filter ("orderBy")'를 사용하여 컨트롤러에 정렬 된 복사본을 생성해야합니다. –

+0

@NewDev 뷰에 항목을 여러 개 선택하기 때문에 인덱스가 필요합니다. 그래서 apple을 선택한 다음 오렌지색을 선택하면 오렌지색이'orderBy'에 관계없이 자동으로 선택되기를 원합니다 – anvarik

답변

1

이 사용자 정의 필터에 의해 https://stackoverflow.com/a/22978169/1632286

app.filter('index', function() { 
    return function (array, index) { 
     if (!index) 
      index = 'index'; 
     for (var i = 0; i < array.length; ++i) { 
      array[i][index] = i; 
     } 
     return array; 
    }; 
}); 

HTML을 달성 할 수있다.

이 방법은 개체 컬렉션에 적합합니다.

이 맞춤 필터가 적용된 모든 필터 (orderBy 등) 목록의 첫 번째 항목이어야하며 추가 속성 색인 (맞춤 설정 가능)이 추가됩니다. 수집.

+0

'index'에 필터를 추가해도'items.indexOf ('apple')'은'3'이고 items.indexOf ('orange')'는 0이 아니기 때문에 내 문제는 해결되지 않습니다. 내가 원하는 건 1, 바나나에 액세스 할 수 있도록 UI 인덱스 0과 2를 얻는 것입니다. – anvarik

2

내가 접근하는 가장 쉬운 방법은 컨트롤러의 배열을 미리 필터링하고 해당 배열을 조작하는 것입니다. 필터를 적용한 후

<div ng-repeat="item in orderedItems"> 
    {{item}} 
</div> 
0

각도 허용은 데이터의 별칭을 지정합니다 : 당신이 ng-repeat 필터없이 orderedItems 이상 것보기에 물론

$scope.orderedItems = $filter("orderBy")($scope.Items, "+"); 

$scope.multiSelect = function(minIdx, maxIdx){ 
    //... 
    $scope.selectedItems = $scope.orderedItems.slice(minIdx, maxIdx); 
} 

. 해당 별칭을 항목과 함께 항목을 선택하는 방법이나 주문한 항목의 항목 색인 인 $index에 전달할 수 있습니다.

<div ng-repeat="item in items | orderBy: '+' as orderedItems"> 
    <a ng-click="itemSelected(orderedItems, $index)">{{item}}</a> 
</div> 
관련 문제