2016-09-13 2 views
0

AngularJS에 대한 새로운 경험입니다. 나는 다음과 같은 정보를Angularjs를 날짜순으로 정렬하기

<table> 
<tr> 
    <th><span ng-click="sortType = 'first_name'; sortReverse = !sortReverse">Referral Name</span></th> 
    <th><span ng-click="sortType = 'date'; sortReverse = !sortReverse">Referral Name</span></th> 
</tr> 
<tr ng-repeat="x in referral | orderBy:sortType:sortReverse"> 
    <td>name</td> 
    <td>date</td> 
</tr> 
</tabe> 

있는 테이블을 가지고 그리고 JS 코드가

$scope.sortType = ''; 
$scope.sortReverse = false; 

이 상승과 하강을 위해 완벽하게 작동합니다 (컨트롤러 연결 후) 다음과 도움을

을 사용할 수 이름을 정렬 할 때.

날짜의 경우에도 유사하게 작동합니다 (날짜가 아닌 알파벳순으로 정렬 됨).

내가 백엔드 (파이썬)에서 얻고 날짜 형식이 형식입니다 :

i["date"] = i["date"].strftime("%B %d, %Y") 
September 13, 2016 <-- this format 

나는 내가 만든 실수를 이해하지만, 나는 그것을 위해 솔루션을 찾을 수 없습니다입니다.

어떻게 날짜순으로 정렬 할 수 있습니까?

미리 감사드립니다.

+0

이상적으로는 [날짜 형식] (https://developer.mozilla.org)을 가져 오는 방법을 찾아야합니다./en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)를 javascript에 입력 한 다음 각도의 [날짜 필터] (https://docs.angularjs.org/api/ng/filter/date)를 사용하여 표시합니다 . 쉽다면 타임 스탬프 나 ISO 형식의 날짜 문자열을 보낼 수 있으며 필터는 여전히 잘 처리 할 것입니다 (실제로 JavaScript 날짜로 직접 변환 할 필요는 없습니다). – mgilson

답변

1

이상적으로는 날짜에 대한 정렬 가능한 개체가 있어야합니다. 하나의 후보자는 isoformatted 날짜입니다.

i["date"] = i["date"].isoformat() 

이제 정렬 작업은 정상적으로 작동하지만 잘 작동하지 않습니다. 따라서 날짜 필터를 사용하여 UI에서 형식을 지정해야합니다.

<table> 
<tr> 
    <th><span ng-click="sortType = 'first_name'; sortReverse = !sortReverse">Referral Name</span></th> 
    <th><span ng-click="sortType = 'date'; sortReverse = !sortReverse">Referral Name</span></th> 
</tr> 
<tr ng-repeat="x in referral | orderBy:sortType:sortReverse"> 
    <td>name</td> 
    <td>{{x.date | date : 'MMMM d, yyyy'}}</td> 
</tr> 
</table> 
+0

당신은 구세주 야 .. 고마워, 칼 슨! –

0

눈치 채 셨던 것처럼받은 값은 문자열 유형이므로 알파벳순으로 정렬됩니다. 미리 Date()로 변환해야합니다.

referral.forEach((ref) => { 
    ref.date_obj = new Date(ref.date) 
}; 
난 그냥 확인

는, 자바 스크립트 형식을 구문 분석하는 것 같다 "그러니까 기본적으로 당신이 필요로 새 Date 객체 (또는 기존 대체) 당신이있어 새로운 속성을 추가 데이터의 배열을 통해 루프입니다 2016 년 9 월 13 일 "꽤 잘했다.

+0

그러나 이것은 '날짜'가 ISO가 아닌 다른 형식을 어떤 형식으로 잘 표준화되지 않았기 때문에 꽤 브라우저 의존적 일 수 있습니다. – mgilson

+0

그러면 날짜 문자열을 수동으로 다시 포맷하여 "2016-09-13"으로 설정할 수 있습니다. 그러나 백엔드에서 반환 형식을 변경하는 것이 훨씬 쉬울 것이라고 생각합니다. – EternalLight