按模板而不是控制器按名称对项目进行排序

时间:2017-07-05 14:01:50

标签: angularjs

Here is my runable Plunker

我想按名称对项目进行排序。这是最常见的错误,#34;请选择学生姓名",它显示为空字段。

<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是: &#34;请选择学生姓名&#34; - &GT; &#34;酒吧&#34; - &GT; &#34;富&#34;

更新:我想要&#34;请选择学生姓名&#34;在选择

的顶部

2 个答案:

答案 0 :(得分:0)

您希望它们可用的选项按名称排序:

[C++14: 17.6.4.3.2]:

这应该按照他们的“姓名”属性对学生进行排序。

编辑: 如果您想在顶部添加额外选项,请使用您的控制器首先对“学生”进行排序:

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

然后您可以在那里对其进行排序,并在开头添加一个您想要显示的选项。

顺便说一下,你可以使用orderBy:'name',假设你的选项基于'value';你必须再有一个带有数值的默认条目,如下所示:

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 });
}

答案 1 :(得分: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>