Проблемы в пользовательской фильтрации логического значения в таблице Primeng - PullRequest
0 голосов
/ 13 ноября 2018

Я использую Таблицу primeng для отображения данных в моем приложении Angular, проблема, с которой я сейчас сталкиваюсь, заключается в том, что я должен использовать фильтр, но с условиями, например, если пользователь типа 0, 1 или 2, я должен отображать данные на основена этом, то, что я пытаюсь, это

        if(value == 0) {
            table.filter(value, fieldName, 'equals');
        } else if(value == 1) {
            table.filter(0, fieldName, 'gt');
            table.filter(false, 'array[0].fieldName',  'equals');
        } else if(value == 2) {
            table.filter(0, fieldName, 'gt');
            table.filter(true, 'array[0].fieldName',  'equals');
        }

, если пользователь вводит 0, его фильтрация в порядке, но проблема в том, когда он вводит 1 или 2, потому что я должен фильтровать из 2 полей, я не уверен, чтоЯ пытаюсь сделать это возможно в primeng или нет.

1 Ответ

0 голосов
/ 13 ноября 2018

table.filter(...) работает на одном столбце.

Предназначен для фильтрации данных по конкретному столбцу. Ниже приведено определение типа функции filter:

filter(value: any, field: any, matchMode: any): void;

Но вы на правильном пути, так как можно установить разные фильтры, по одному на каждый столбец, которые затем объединяются с AND для фильтрации данных таблицы.

Например, следующая функция может фильтровать по нескольким столбцам:

filter(dt) {
  dt.filter('Blue', 'color', 'equals');
  dt.filter('Bmw', 'brand', 'equals');
}

Вот пример шаблона:

<p-table #dt [value]="cars">
  <ng-template pTemplate="header">
     <tr>
      <th>
        Color
      </th>
      <th>
        Brand
      </th>
     </tr>
   </ng-template>
   <ng-template pTemplate="body" let-car>
     <tr>
      <td>{{car.color}}</td>
      <td>{{car.brand}}</td>
     </tr>
   </ng-template>
</p-table>

<button (click)="filter(dt)">Get Blue Bmw</button>

И полный компонент:

export class MyComponent {
  cars: {
    color: string;
    brand: string;
  }[];

  constructor() {
    this.cars = [{
      color: "blue",
      brand: "bmw"
    },{
      color: "red",
      brand: "bmw"
    }];
  }

  filter(dt) {
    dt.filter('Blue', 'color', 'equals');
    dt.filter('Bmw', 'brand', 'equals');
  }
}

Кнопка применит фильтр к нескольким столбцам, что приведет к получению данных. фильтруется с color equals Blue AND brand equals Bmw.

Редактировать: То же самое работает для boolean.

cars: {
  color: string;
  brand: string;
  enable: boolean;
}[];

filter(dt) {
  dt.filter('Blue', 'color', 'equals');
  dt.filter('Bmw', 'brand', 'equals');
  dt.filter(true, 'enable', 'equals');
}

В вставленном вами коде 'array[0].fieldName' трактуется как литерал из-за кавычек, поэтому он ищет имя поля "array [0] .fieldName" и не оценивает его.

...