2013-08-15 51 views
23

Tôi đã cố gắng sử dụng ng-options để hiển thị một mảng phông chữ trong một lựa chọn được sắp xếp theo thứ tự bảng chữ cái theo giá trị của các mục trong mảng.AngularJS ngOptions mảng sắp xếp

HTML

<select ng-options="font for font in webfonts | orderBy:'font'" name="fonts"> 
    <option value="">Choose a font</option> 
</select> 

JS

$scope.webfonts = [ 
     'Abel', 'Crafty Girls' , 'Lato' , 'Average', 
     'Corben', 'Quicksand', ... ]; 

tôi đã cố gắng thay đổi giá trị trong orderBy và những thứ khác. Tôi đã đọc qua documentation và tất cả các nhận xét.

Tôi đang thiếu gì? Đây có phải là chỉ làm việc trên các đối tượng?

Trả lời

47

Đây là những gì bạn cần làm:

<select ng-model="selected" ng-options="font for font in webfonts | orderBy:'toString()' " name="fonts"> 
  1. Bạn cần phải thêm ng-mô hình để thực hiện một cách chính xác các công trình bắt buộc đối với một danh sách các chuỗi.
  2. Bạn có thể sử dụng toString() để sắp xếp nếu đầu vào chứa danh sách các chuỗi. Vì biểu thức của orderBy có thể là hàm Getter. Kết quả của hàm này sẽ được sắp xếp bằng toán tử <, =,>.

Demo

+0

Công trình này hoạt động! Cảm ơn! nhưng tại sao nó hoạt động? Tôi bị bối rối. –

+1

@ChrisB Vì 'toString()' có sẵn trong bất kỳ đối tượng 'string' nào trong nguyên mẫu. Điều này thực sự là một thủ thuật, và nó xứng đáng để ghi nhớ mãi mãi. – zsong

+2

Nó hoạt động vì '.toString()' là một thuộc tính của chuỗi trong mảng 'webfonts' và' orderBy' đang mong đợi một thuộc tính của đối tượng đã cho ('font'). Đồng thời 'toString()' trả về giá trị của 'font' xảy ra chính xác những gì tôi muốn đặt hàng. Thê nay đung không? Tôi có hiểu nó đúng không? –

3

Như tài liệu chỉ định, đối số chuỗi là cho thuộc tính đối tượng, không phải cho nguyên thủy. Tôi nghĩ, như tiểu học như nó âm thanh, bạn phải tạo ra một chức năng trên phạm vi mà chỉ đơn giản là trả về các đối số, và vượt qua đó để orderBy.

Xem jsFiddle!

+0

này hoạt động! Cảm ơn! nhưng tại sao nó hoạt động? –

+0

Theo tài liệu chỉ định, bạn có thể chuyển tên hàm và kết quả của nó được sử dụng làm giá trị so sánh! –