2016-12-02 2 views
0

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

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

Это должно иметь что-то Todo I Догадайтесь, как я загружаю данные.

Прежде чем я добавил, что загрузка данных по трубам работала!

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

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

ТРУБА

импорт {Труба, 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) 
      } 
     } 

); }

+0

Будет ли вызываться труба, если вы удалите параметры ': currentSubject: currentSchoolclass'? –

+0

Затем я получаю эту ошибку: не могу прочитать свойство «0» неопределенного в TestTypePipe.transform (http: // localhost: 4200/main.bundle.js: 72680: 34) по адресу http: // localhost: 4200/main.bundle .js: 20150: 22 at => Кажется, я буду нарушать и консоль. Завтра кое-что выучите, чтобы найти неопределенный ... – Pascal

+0

hum, right, that's из-за строки let внутри transform, он пытается читать параметры из массива –

ответ

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

Спасибо, что это работает сейчас, кажется, я читал устаревший блог из-за ... args и args? проблема! – Pascal

Смежные вопросы