2017-07-05 118 views
0

Here is my runable Plunker項目模板,而不是控制

我想按名稱進行排序的項目。這是上面的錯誤,「請選擇一個學生姓名」,它顯示爲空白字段。

<select ng-options="student as student.name for student in students | orderBy: sortNameExcludeTopOne" 
     ng-model = "student">   
</select> 




$scope.sortNameExcludeTopOne = function(student) { 
     if (student.id === 0) { 
      return -1; 
     } 
     return student.name; 
     } 

我想要什麼:

  • 現在,我通過在控制器使用自定義功能進行排序由其名稱的項目,我們可以做排序的模板,它的名字項目?而不是在控制器?

  • 我要爲選擇什麼UI是: 「請選擇一個學生的名字」 - >「酒吧」 - >「富」

更新:我想「請選擇一個學生的名字」在選擇

+0

你只需要選擇頂部的「請選擇一個學生姓名」,或者你需要按名稱排序其餘的名單? –

+0

我想要「請選擇一個學生的名字」在選擇的頂部。其餘的學生按名稱排序 – EntryLeveDeveloper

回答

0

你不需要推項目數組,你可以把然後直接在視圖:

<select ng-options="student as student.name for student in students | orderBy: 'name'" ng-model = "student"> 
    <option value="">Please select a student name</option> 
</select> 
+0

您的解決方案適用於我。爲什麼顯示的是空白字段,而不是「請選擇一個學生姓名」 – EntryLeveDeveloper

0

頂端您想要的選項提供給他們由名稱排序:

<select ng-options="student as student.name for student in students | orderBy: 'name'" ng-model="student">   
</select> 

的是,如果學生們通過他們的「名字」屬性排序。

編輯: 如果你想在上面添加額外的選項,然後,用你的控制器來排序的「學生」第一:

students() { 
    const studentList = someStudents(); 
    studentList.sort((a, b) => { 
    if(a.name < b.name) return -1; 
    if(a.name > b.name) return 1; 
    return 0; 
    }); 
    studentList.unshift({ new: option, goes: here }); 
} 

然後你就可以在那裏對它進行排序,並插入一個多選項在開始時顯示您想要的選項。順便說一句,你可以使用orderBy:'name',假設你的選項是基於'value'的;你必須有一個數值,像這樣多了一個默認項:

<select ng-options="student as student.name for student in students | orderBy: 'name'" 
    ng-model="student"> 
    <option value="-1">Please select a student name:</option> 
</select> 
+0

我想在選擇頂部選擇「請選擇學生姓名」。我不能使用orderBy:「name」,因爲這也會對「請選擇一個學生姓名」進行排序 – EntryLeveDeveloper

+0

已爲您更新了其他兩個選項的答案,但您仍然可以使用orderBy – rrd

+0

將導致空字段,而不是「請選擇一個學生姓名:」。你知道爲什麼嗎?我用value =「」,然後工作。 – EntryLeveDeveloper