Не удается прочитать свойство «фильтр» нуля в angular 2?

Я получаю сообщение об ошибке: Невозможно прочитать свойство "фильтр", равное нулю.

когда я применяю фильтр в angular 2. вот мой код

http://plnkr.co/edit/K46jJsnmHiONuqIsnuzW?p=preview

import {Pipe} from 'angular2/core';

@Pipe({
  name: 'sortByName',
  pure: false,
})
export class SortByNamePipe {

  transform (value, [queryString]) {
    // console.log(value, queryString);
    return value.filter((student)=>new RegExp(queryString).test(student.name))
    // return value;
  }
}

person user944513    schedule 11.02.2016    source источник


Ответы (1)


Это потому, что у вас есть данные в качестве входных данных, которые загружаются асинхронно с использованием HTTP-запроса.

Вам необходимо проверить это, прежде чем вы сможете применить фильтр:

export class SortByNamePipe {
  transform (value, [queryString]) {
    if (value==null) {
      return null;
    }

    return value.filter((student)=>new RegExp(queryString).test(student.name))
    // return value;
  }
}
person Thierry Templier    schedule 11.02.2016
comment
Чтобы проверить, является ли значение нулевым или нет. Данные будут получены, метод transform будет вызван снова с ненулевым значением ... - person Thierry Templier; 11.02.2016
comment
Лучше использовать if(value==null) return null; ;-) - person Thierry Templier; 11.02.2016
comment
все еще он не фильтрует ... :( введите тест в поле ввода это не список фильтров - person user944513; 11.02.2016
comment
Вы хоть представляли, почему он не фильтрует список, когда мы вводим поле ввода - person user944513; 11.02.2016
comment
Я исправил проблему в моем plunkr (plnkr.co/edit/rI9rrZ2qlL88xgJpN66z?p=preview). Фактически, вам нужно использовать ngModel для ввода. Таким образом, фильтр будет повторно запущен при обновлении входных данных. Будьте осторожны, чтобы не использовать свойство в объекте. Потому что Angular2 не сможет обнаружить изменения. Этот вопрос должен помочь вам понять, что происходит: stackoverflow.com/questions/34456430/ (особенно ответ Марка!) - person Thierry Templier; 11.02.2016