Невозможно прочитать свойство 0 из undefined с настраиваемым фильтрующим каналом

Поскольку я создал и добавил настраиваемый конвейер фильтра для массива, я получаю это исключение при загрузке представления:

TesttypesListComponent - inline template:35:14 caused by: Cannot read property '0' of undefined

У этого должно быть что-то, что, я думаю, связано с тем, как я загружаю данные.

До того, как я добавил, загрузка данных трубы работала!

Я могу поставить точку останова в канал, но она никогда не попадает внутрь из-за ошибки.

Кто-нибудь знает, что я делаю не так с моей первой трубкой?

ТРУБКА

импортировать {Pipe, PipeTransform} из '@ 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;
            });
        }
    }
}

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

); }


person Pascal    schedule 02.12.2016    source источник
comment
Будет ли канал вызван, если вы удалите параметры :currentSubject:currentSchoolclass?   -  person André Werlang    schedule 03.12.2016
comment
Затем я получаю эту ошибку: Не удается прочитать свойство 0 of undefined в TestTypePipe.transform (localhost : 4200 / main.bundle.js: 72680: 34) на localhost: 4200 / main.bundle.js: 20150: 22 at = ›Кажется, завтра я выйду из комментария и в console.log кое-что найду, чтобы найти неопределенное ...   -  person Pascal    schedule 03.12.2016
comment
хм, верно, это из-за строки let внутри преобразования, он пытается прочитать параметры из массива   -  person André Werlang    schedule 03.12.2016


Ответы (1)


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;
            });
        }
    }
}
person André Werlang    schedule 03.12.2016
comment
спасибо, теперь работает, кажется, я прочитал устаревший блог из-за ... args и args? проблема! - person Pascal; 03.12.2016