【发布时间】:2016-08-31 06:58:41
【问题描述】:
目标:
用户应该能够在搜索字段中输入课程名称,并查看已注册该课程的学生列表。
型号:
course (has a course name and course code)
student (has a list of registered courses)
students (an array of student objects)
方法:
ng-repeat 遍历学生对象列表。对于每个学生对象,将对象传递给自定义过滤函数filterByCourse(byCourse, student)。
待实现: filterByCourse 函数遍历 student.courses。如果找到与 byCourse 具有相同名称或代码的课程,则会将其添加到过滤学生列表中。将filteredStudents 列表传递给视图以代替未过滤的学生列表。
代码如下:
<input class="form-control" type="text" ng-model="byCourse"
placeholder="Search by course id or course name..">
<ul ng-repeat="student in students | filter: filterByCourse(byCourse, student)">
<li ng-init="index=0; classes=['list--students_item', 'list--students_item--active']" ng-click="stageMeToCourse($index)"
ng-class="classes[index % classes.length]"
class="col-xs-24">
<img src="/img/profile_default.png">
<h4>{{ student.first_name }} {{ student.last_name }}
<span class="role">{{ student.role }}</span>
<i class="fa fa-chevron-right"></i>
</h4>
<p class="student_nr">{{ student._id }}</p>
</li>
</ul>
</div><!--list-students-->
问题:
当我将学生对象传递给 filterByCourse 时,第一行的 console.log 显示学生未定义,因此我无法遍历课程并返回我想要的过滤学生列表。
scope.filterByCourse = function(course, student){
console.log(student); //student is undefined
}
我尝试过的事情:
我尝试使用 ng-repeat 中的过滤器功能来遍历每个学生对象的课程列表,但不知道该怎么做。
我试过用锤子敲东西。
进一步的问题:
如果用户在输入字段中输入了一些字符串,我只希望以这种方式过滤结果。如果输入字段为空,则不应触发过滤功能。我不知道该怎么做!
【问题讨论】:
-
请展示您的过滤功能,因为如果不展示您的实现方式,我们将无法看到问题所在。也许最好还是创建一个自定义过滤器,而不是使用内置的 Angular 过滤器函数调用函数。
-
@pkeuter 自定义过滤功能还没有实现。到目前为止,它所做的只是 console.log student,当从 veiw 调用函数时,它是未定义的。这是第一个问题:/
-
我知道它还没有完全实现,但是您已经开始实现它并且在该函数中收到一条错误消息。请出示它,以便我们可以看到您在此处尝试执行的操作。
-
@JulianBlair 请查看选项 2 的更新答案
标签: javascript html angularjs angularjs-ng-repeat ng-repeat