无法使用自定义过滤器管道读取未定义的 属性“0”
Cannot read property '0' of undefined with custom filter pipe
由于我已经为数组创建并添加了自定义过滤器管道,因此在加载视图时出现此异常:
TesttypesListComponent - inline template:35:14 caused by: Cannot read property '0' of undefined
这一定与我加载数据的方式有关。
在我添加之前管道数据加载成功了!
我可以在管道中放置一个断点,但由于错误,它永远不会在内部命中。
有人知道我的第一根烟斗哪里做错了吗?
管道
从“@angular/core”导入 { Pipe, PipeTransform };
@Pipe({
name: 'TestTypePipe'
})
export class TestTypePipe implements PipeTransform {
transform(testTypes, args?) {
let [currentSubject, currentSchoolclass] = args;
if (!currentSubject || !currentSchoolclass) {
return [];
}
else {
return testTypes.filter(s => {
return s.subjectId == currentSubject.subjectId && s.schoolclassId == currentSchoolclass.schoolclassId;
});
}
}
}
HTML
<tbody>
<tr *ngFor="let t of testTypes | TestTypePipe:currentSubject:currentSchoolclass; let i = index">
<template [ngTemplateOutlet]="getTemplate(t)" [ngOutletContext]="{ $implicit: t, index: i }"></template>
</tr>
</tbody>
组件
currentSubject: Subject;
currentSchoolclass: Schoolclass;
ngOnInit() {
this.route.params.subscribe(params => { this.schoolyearId = parseInt(params['id']); });
this.testService.getTestTypes(this.schoolyearId).subscribe(data => {
this.schoolclasses = data.schoolclasses.map(m => new Schoolclass(m));
this.subjects = data.subjects.map(m => new Subject(m));
for (let t of data.testTypes) {
t.viewMode = ViewMode.Displaying;
let testType = new AssignedTestType(t);
this.testTypes.push(testType)
}
}
);
}
Pipe#transform
采用可选的顶级参数,而不是单个 args: []
.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'TestTypePipe'
})
export class TestTypePipe implements PipeTransform {
transform(testTypes, ...args) {
let [currentSubject, currentSchoolclass] = args;
if (!currentSubject || !currentSchoolclass) {
return [];
}
else {
return testTypes.filter(s => {
return s.subjectId == currentSubject.subjectId && s.schoolclassId == currentSchoolclass.schoolclassId;
});
}
}
}
由于我已经为数组创建并添加了自定义过滤器管道,因此在加载视图时出现此异常:
TesttypesListComponent - inline template:35:14 caused by: Cannot read property '0' of undefined
这一定与我加载数据的方式有关。
在我添加之前管道数据加载成功了!
我可以在管道中放置一个断点,但由于错误,它永远不会在内部命中。
有人知道我的第一根烟斗哪里做错了吗?
管道
从“@angular/core”导入 { Pipe, PipeTransform };
@Pipe({
name: 'TestTypePipe'
})
export class TestTypePipe implements PipeTransform {
transform(testTypes, args?) {
let [currentSubject, currentSchoolclass] = args;
if (!currentSubject || !currentSchoolclass) {
return [];
}
else {
return testTypes.filter(s => {
return s.subjectId == currentSubject.subjectId && s.schoolclassId == currentSchoolclass.schoolclassId;
});
}
}
}
HTML
<tbody>
<tr *ngFor="let t of testTypes | TestTypePipe:currentSubject:currentSchoolclass; let i = index">
<template [ngTemplateOutlet]="getTemplate(t)" [ngOutletContext]="{ $implicit: t, index: i }"></template>
</tr>
</tbody>
组件
currentSubject: Subject;
currentSchoolclass: Schoolclass;
ngOnInit() {
this.route.params.subscribe(params => { this.schoolyearId = parseInt(params['id']); });
this.testService.getTestTypes(this.schoolyearId).subscribe(data => {
this.schoolclasses = data.schoolclasses.map(m => new Schoolclass(m));
this.subjects = data.subjects.map(m => new Subject(m));
for (let t of data.testTypes) {
t.viewMode = ViewMode.Displaying;
let testType = new AssignedTestType(t);
this.testTypes.push(testType)
}
}
); }
Pipe#transform
采用可选的顶级参数,而不是单个 args: []
.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'TestTypePipe'
})
export class TestTypePipe implements PipeTransform {
transform(testTypes, ...args) {
let [currentSubject, currentSchoolclass] = args;
if (!currentSubject || !currentSchoolclass) {
return [];
}
else {
return testTypes.filter(s => {
return s.subjectId == currentSubject.subjectId && s.schoolclassId == currentSchoolclass.schoolclassId;
});
}
}
}