2013-06-12 35 views
28

Giả sử tôi có mảng dữ liệu sau theo hình thức này:AngularJs - ngOptions: Làm thế nào để đặt hàng qua Group Name và sau đó bởi Label

var data = [{group:GroupA, label: BB}, {group:GroupB, label: DD}.....]. 

My ràng buộc sẽ là một cái gì đó như:

<select data-ng-options="c as c.label group by c.group for c in data"></select> 

Tôi muốn danh sách thả xuống liệt kê tất cả các mục có GroupA trước GroupB trong khi có chúng cũng được sắp xếp theo từng nhóm.

Điều gì đó tương tự.

GroupA 
AA 
BB 
CC 

GroupB 
DD 
EE 
FF 

Tôi biết tôi có thể sử dụng bộ lọc Góc đơn đặt hàng, nhưng điều đó thực sự không hiệu quả theo cách tôi cần. Đoán của tôi là tôi phải viết một bộ lọc tùy chỉnh mà tự sắp xếp danh sách theo cách tôi muốn, nhưng tôi đã tự hỏi nếu có một cách dễ dàng hơn để hoàn thành nhiệm vụ.

Trả lời

46

orderBy có thể lấy một mảng nhiều thông số để sắp xếp theo thứ tự. Vì vậy, bạn có thể làm:

c as c.label group by c.group for c in data | orderBy:['group','label'] 

Here is a fiddle

+0

Cảm ơn. Tôi đã không nhận ra bạn có thể vượt qua trong một mảng để orderBy. Đoán tôi bỏ qua phần đó trong tài liệu angularjs. Nhưng ít nhất tôi biết có một cách dễ dàng hơn vì đó sẽ là một trường hợp sử dụng khá phổ biến. –

+1

bạn có thể chỉ định thứ tự sắp xếp bằng phương pháp này không? tức là tôi muốn sắp xếp theo nhóm asc rồi nhãn desc? –

+7

@RossJones Có, bạn sẽ thay đổi '['group', 'label']' thành '['+ group', '- label']' – sh0ber

1

Có vẻ như orderBy sẽ hoạt động chính xác như bạn muốn.

Chỉ cần biểu hiện của bạn và thêm orderBy ở cuối:

c as c.label group by c.group for c in data | orderBy:'label' 

này đầu tiên sẽ ra lệnh cho data mảng bởi giá trị của tài sản label mỗi mục, và sau đó nhóm chúng. Vì dữ liệu sẽ được sắp xếp một cách chính xác, mỗi nhóm sẽ hiển thị được sắp xếp chính xác.

Here's a fiddle.

Lưu ý cách các mảng ban đầu được xác định theo thứ tự ngược, nhưng được sắp xếp một cách chính xác trong mỗi nhóm trong các lựa chọn.

+0

mà thực sự sẽ không đảm bảo nhóm A trước khi Nhóm B. nếu bạn có nhóm A chỉ chứa "GG, HH, II", thứ tự sẽ bị đảo ngược. Tôi đoán tôi đã đưa ra một trường hợp ví dụ xấu. : P. Tôi đã thực sự có thể làm điều này để làm việc bằng cách phân loại theo Nhóm đầu tiên và nếu hai nhóm là như nhau, sau đó sắp xếp nó theo giá trị nhãn. –

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