2016-06-04 1 views
0

하지 않습니다,하지만 나는 NG 반복해 orderBy 필터에 문제로 실행하십시오. PHP 스크립트에서 AJAX를 통해 JSON 데이터를 가져옵니다. 데이터가 잘로드되고, 그냥 작동하지 않는 순서 일뿐입니다. 이건 내 자바 스크립트 코드AngularJS와 해 orderBy 내가 학생들을위한 작은 데모 AngularJS와 응용 프로그램 작업입니다 아무것도

<div ng-controller="MemberListController"> 
    <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> 
    <hr/> 
    <button ng-click="predicate=''">Set to unsorted</button> 

    <table class="table"> 
     <thead> 
      <tr> 
       <th> 
        <button ng-click="order('gender')">Geslacht</button> 
        <span class="sortorder" ng-show="predicate === 'gender'" ng-class="{reverse:reverse}"></span> 
       </th> 
       <th> 
        <button ng-click="order('first_name')">Voornaam</button> 
        <span class="sortorder" ng-show="predicate === 'first_name'" ng-class="{reverse:reverse}"></span> 
       </th> 
       <th> 
        <button ng-click="order('last_name')">Achternaam</button> 
        <span class="sortorder" ng-show="predicate === 'last_name'" ng-class="{reverse:reverse}"></span> 
       </th> 
       <th>Geboren</th> 
       <th>Lid sinds</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="member in members track by member.id | orderBy:predicate:reverse" ng-hide="member.deleted == 1"> 
       <td>{{ member.gender }}</td> 
       <td>{{ member.first_name }}</td> 
       <td>{{ member.last_name }}</td> 
       <td>{{ member.birth_date | date:'dd-MMM-yyyy' }}</td> 
       <td>{{ member.member_since | date:'dd-MMM-yyyy' }}</td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

:

함께 내가 걱정 HTML 페이지의 일부입니다

JSON 데이터가에서 매우 간단한 스크립트에 의해 생성되는
(function() 
{ 
    // init the module 
    var app = angular.module('ledenjs', []); 

    // define the memberlist controller 
    app.controller('MemberListController', ['$scope', '$http', function ($scope, $http) 
    { 
     // define and set the scope properties 
     $scope.members = []; 
     $scope.predicate = 'last_name'; 
     $scope.reverse = false; 

     // define the order method 
     $scope.order = function (predicate) 
     { 
      $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false; 
      $scope.predicate = predicate; 
     }; 

     // read the members from the db 
     $http.get('MY_URL_HERE') 
     .success(function (response) 
     { 
      console.log('Received ' + response.length + ' members.'); 
      $scope.members = response; 
     }) 
     .error(function() 
     { 
      alert('Could not retrieve members from server.'); 
     }); 
    }]); 
})(); 

샘플 테이블 :

$result = mysqli_query($mysqli, "SELECT * FROM ledenjs"); 
while ($row = mysqli_fetch_assoc($result)) { 
    $data[] = $row; 
} 
header("Content-Type: application/json"); 
echo json_encode($data); 

반환 된 데이터의 조각 :

(당신이 내 코드가에 샘플을 기반으로 볼 수) 그래서 ... 내가 지금 여기에이 주제에 대한 질문을 검토 한
[{"id":"10001","birth_date":"1953-09-02","first_name":"Georgi","last_name":"Facello","gender":"M","member_since":"1986-06-26","deleted":"0"},{"id":"10002","birth_date":"1964-06-02","first_name":"Bezalel","last_name":"Simmel","gender":"F","member_since":"1985-11-21","deleted":"0"},{"id":"10003","birth_date":"1959-12-03","first_name":"Parto","last_name":"Bamford","gender":"M","member_since":"1986-08-28","deleted":"0"},{"id":"10004","birth_date":"1954-05-01","first_name":"Chirstian","last_name":"Koblick","gender":"M","member_since":"1986-12-01","deleted":"0"}] 

, 내가있는 OrderBy here에 대한 AngularJS와 문서를 검토 한 결과 ,하지만 여전히 내 테이블은 정렬되지 않습니다.

이러한 질문의 대부분은 "orderBy는 배열에서만 객체에 대해 작동하지 않습니다"라고 대답하지만 데이터는 배열로 보이며 실제 검색은 정상적으로 작동합니다. 페이지를로드 할 때 정확한 레코드 수로 콘솔 로그 행을 봅니다.

이것은 천천히 벽을 몰고 가고 있습니다 ... 어떤 도움을 주시면 대단히 감사하겠습니다.

마크.

SOLVED : "트랙 바이"및 "orderBy"가 간섭하는 경향이 있음을 지적한 Dmitriy Khudorozhkov에게 감사드립니다. 이 작업은 모든 필터 후, 마지막에 "에 의해 트랙"를 넣어 것입니다 수행합니다

<tr ng-repeat="member in members | orderBy:predicate:reverse track by member.id"> 
+1

사용중인 Angular의 버전을 물어볼 수 있습니까? –

+0

v1.5.6을 사용 중입니다. – kathmann

답변

1
<tr ng-repeat="member in members track by member.id | orderBy:predicate:reverse" ng-hide="member.deleted == 1"> 

- AngularJS와에서 휴식 수도 라인 버전 1.2 이전;

track by member.id 

부분을 제거하고 작동하는지 확인하십시오.

업데이트 : 나중에 실제 각도 v.1.2에 대한 솔루션은 다음과 같습니다

ng-repeat="member in members | orderBy:predicate:reverse track by member.id" 

-should come after orderBy clause을 추적.

+0

@kathmann 해당 주문을 추가해야합니다. "추적 대상"과의 충돌 - 이것이 문제였습니다. 다음을 확인하십시오. http://stackoverflow.com/questions/29608450/ng-repeat-with-track-by-and-filter-and-orderby-not-working 반영하기 위해 답을 업데이트했습니다. –

+0

Thx, 우리는 기본적으로 동일한 편집을 기본적으로 만들었습니다 ;-) – kathmann

+0

관심 대상 : Angular 1.5.8에서는'track by member.id' 대신'track by $ index'를 사용하면 정렬이 실패합니다. –

관련 문제