Angular material 使用“角度材质”复选框根据类别过滤球场

Angular material 使用“角度材质”复选框根据类别过滤球场,angular-material,angular6,Angular Material,Angular6,我有两个数组,分别称为1.Courses和2.Categories每个课程都有不同的类别。我想通过category使用mat复选框过滤课程 示例:javascript是一个课程名称,脚本编写是类别 这是 下面是该方法的屏幕截图: 它应该适用于多个复选框过滤,谢谢您。因此,使用您当前的方法IMO,最简单的方法是创建一个新的课程数组filteredCourses,并在模板中迭代 OnInit,将filteredCourses设置为courses,以便在init上呈现所有课程 ngOnInit()

我有两个数组,分别称为1.Courses和2.Categories每个课程都有不同的类别。我想通过category使用mat复选框过滤课程

示例:javascript是一个课程名称,脚本编写类别

这是 下面是该方法的屏幕截图:


它应该适用于多个复选框过滤,谢谢您。因此,使用您当前的方法IMO,最简单的方法是创建一个新的课程数组
filteredCourses
,并在模板中迭代

OnInit
,将
filteredCourses
设置为
courses
,以便在init上呈现所有课程

 ngOnInit() {
   this.filteredCourses = this.courses;
 }
接下来,您需要某种方法来维护所选类别的列表。如果您使用内置表格的Angulars,这会容易得多,但是,如果没有,我可以提出以下建议:

onSelect
(单击),将单击的类别添加到所选类别的列表中(单击时,如果不存在,则添加,否则删除)

然后,下一步是将
课程
数组过滤到
类别ID
包含在
所选类别
列表中的课程,并使用结果设置
过滤课程
数组,从而允许模板更新。因此,您的
onSelect
函数变为:

onSelect(selectedCategory: any) {
   this.selectCategory(selectedCategory);
   this.filteredCourses = this.courses.filter((course: any) => {
     return this.selectedCategories.findIndex((cat: any) => {
        return course.categoryId === cat.id;
     }) !== -1;
   });
 }

更新的闪电战建议:

因此,使用您当前的方法,IMO,最简单的方法是创建一个新的课程数组
filteredCourses
,并在模板中迭代

OnInit
,将
filteredCourses
设置为
courses
,以便在init上呈现所有课程

 ngOnInit() {
   this.filteredCourses = this.courses;
 }
接下来,您需要某种方法来维护所选类别的列表。如果您使用内置表格的Angulars,这会容易得多,但是,如果没有,我可以提出以下建议:

onSelect
(单击),将单击的类别添加到所选类别的列表中(单击时,如果不存在,则添加,否则删除)

然后,下一步是将
课程
数组过滤到
类别ID
包含在
所选类别
列表中的课程,并使用结果设置
过滤课程
数组,从而允许模板更新。因此,您的
onSelect
函数变为:

onSelect(selectedCategory: any) {
   this.selectCategory(selectedCategory);
   this.filteredCourses = this.courses.filter((course: any) => {
     return this.selectedCategories.findIndex((cat: any) => {
        return course.categoryId === cat.id;
     }) !== -1;
   });
 }
更新闪电战建议: