15

Im sử dụng bộ lọc này https://github.com/a8m/angular-filter#groupby để đặt hàng dữ liệu của tôi như vậy, và nó hoạt động tuyệt vời:góc ng-lặp lại groupby và Giữ trật tự

<div ng-repeat="(key, value) in tags.tags.objects | groupBy:'category.name' "> 

Bây giờ Im cố gắng giữ trật tự của các nhóm, bởi category.order .

Điều này có khả thi không?

tôi đã cố gắng đường ống nó như vậy:

<div ng-repeat="(key, value) in tags.tags.objects | groupBy:'category.name' | orderBy:'category.order' "> 

Nhưng nó không thực hiện bất kỳ sự khác biệt

Trả lời

17

orderBy lọc không làm việc với các đối tượng trong ngRepeat. Vì vậy, những gì bạn có thể làm là một cái gì đó như thế này:

<!-- 
    Note: toArray filter also attaches a new property $key 
    to the value containing the original key that was used in the object. 
--> 

<div ng-repeat="tags in tagsList | groupBy:'prop' | toArray:true | orderBy:'$key'"> 
    Group name: {{ tags.$key }} 
    <p ng-repeat="tag in tags | orderBy:'prop'"> 
    {{ tag.name }} 
    </p> 
</div> 

Xem: toArray lọc

+0

này là làm mới danh sách của tôi mỗi khi tôi làm một biên tập cho một đối tượng trong mảng của tôi bây giờ gây ra các vấn đề perforance, tôi nghĩ rằng nó đã làm với các ToArray , cách nào xung quanh điều này? – TWilly

3

groupby nên luôn luôn là người cuối cùng trong ng-repeat .. để thiết lập orderBy đầu tiên và cuối cùng và sau đó groupby bạn có thể sử dụng theo dõi bởi chỉ số $ để bình thường ng-lặp lại sẽ được.

ng-repeat="item in items orderBy:'price' | groupBy:'name' track by $index" 

... Hy vọng nó sẽ giúp ngay cả chút muộn!

1

Để một phần của câu trả lời djsiz của (theo dõi bằng là không cần thiết và nó đã mất tích một ống), bạn có thể làm điều này:

<div ng-repeat="(key, value) in tags.tags.objects | orderBy:'category.order' | groupBy:'category.name'"> 

Các groupby tạo ra một đối tượng nhưng orderBy cần một mảng ... nếu bạn orderby trước khi bạn nhóm, nó nên loại đúng

https://jsfiddle.net/r0m4n/kfho6r26/

Các vấn đề liên quan