как отфильтровать пользовательский тип данных (ссылку) в умной таблице ng-2

Я использую фильтры в столбцах умной таблицы ng2 в проекте angular 5. Следующий код работает правильно.

columns: 
  service_start_date: {
    title: "DOS",
    filter: true,
    sort: true
  },

Однако, когда ячейка является настраиваемым компонентом типа ссылки, это не работает. Я попробовал собственный фильтр с filterFunction (). Это тоже не сработало.

columns: {
  id: {
    title: "Enc #",
    type: "custom",
    renderComponent: LinkRenderComponent,
    filter: true,
    sort: true,
    filterFunction(cell?: any, search?: string): boolean {          
      if (cell === search || search === '') {
        return true;
      } else {
        return false;
      }          
    }
  },

Это мой ts-файл LinkRenderComponent.

export class LinkRenderComponent implements ViewCell, OnInit {

constructor(
    private router: Router
  ) { }
renderValue: string;
renderText: string;
hrefValue : string;

@Input() value: string | number;
@Input() rowData: any;

ngOnInit() {
  this.renderValue = this.rowData.encounter_procedure_id;
  this.renderText = this.rowData.encounter_id;
  this.hrefValue = '/home/ar-report/' ;
  }
}

Я понимаю, что мне, возможно, придется заставить его работать в этом файле. Где в этом файле заставить его работать? Как передать в этот файл значение текстового фильтра заголовка строки? Кажется, он настроен на ввод значения в ячейке и набора значений, который является строкой.


person Upasana Sengupta    schedule 26.02.2018    source источник
comment
вы хотите добиться настраиваемой фильтрации.?   -  person Prasanth S    schedule 26.02.2018
comment
Фильтрация пользовательского компонента. Сама фильтрация не очень настраивается. Та же логика, что и их фильтр по умолчанию: true.   -  person Upasana Sengupta    schedule 26.02.2018
comment
также разместить html файл   -  person Prasanth S    schedule 26.02.2018
comment
У этого нет кода. Ну вот. Это HTML-файл. <ng2-smart-table [settings]="settings" [source]="dashBoardData.Content"></ng2-smart-table>   -  person Upasana Sengupta    schedule 26.02.2018
comment
dashBoardData данные   -  person Prasanth S    schedule 26.02.2018
comment
Нет, dashBoardData.Content верен. Имя переменной зависит от вас. Переменная была названа Content в части файла, которая не показана. Это никогда не бывает абсолютным названием «данные». И если бы это было так, не загружалась бы вся таблица, а не только фильтр одного столбца.   -  person Upasana Sengupta    schedule 26.02.2018
comment
я просто прошу вас опубликовать данные dashBoardData,   -  person Prasanth S    schedule 26.02.2018


Ответы (2)


Нет, это не работает ни с одним настраиваемым свойством (т. Е. Не с базовым). Здесь есть ошибка: https://github.com/akveo/ng2-smart-table/blob/master/src/ng2-smart-table/lib/data-source/local/local.filter.ts#L11, который передает "" в качестве значения ячейки функции filterFunction для любого неосновного свойства.

Я взломал компонент (ссылка выше) вот так:

return data.filter(function (el) {
    //var value = typeof el[field] === 'undefined' || el[field] === null ? '' : el[field];
    return filter.call(null, el, search);
});

и передача всего элемента фильтру. Затем у меня есть полное содержимое элемента в filterFunction. И у меня хорошо работает.

person pellyadolfo    schedule 29.05.2018

Я использую другую подсказку (без изменений в исходных файлах). В базовом подходе фильтр будет искать поле с указанным именем, в вашем случае поле с именем «id». Таким образом, вы можете просто создать еще одно текстовое поле «idFilter» в строке с содержимым поиска и удалить свою настраиваемую функцию фильтра:

 columns: {
  **idFilter**: {
    title: "Enc #",
    type: "custom",
    renderComponent: LinkRenderComponent,
    filter: true,
    sort: true
    }
  },

В компоненте ngOnInit заполните его поле:

export class LinkRenderComponent implements ViewCell, OnInit {

ngOnInit() {
  this.renderValue = this.rowData.encounter_procedure_id;
  this.renderText = this.rowData.encounter_id;
  this.hrefValue = '/home/ar-report/' ;

  **this.idFilter = "you search content";**
  }
}
person Kirill Volynkin    schedule 03.05.2019