Angular5: скрыть строки ag-gird в зависимости от условия

У меня есть приведенный ниже ответ от службы, когда когда-либо flag верно, я должен скрыть всю строку (всего у меня 20 столбцов), иначе показать ее. Как я могу добиться этого в ag-grid?

data = {
    name: "A",
    flag: true
   },
   {
    name: "B",
    flag: false
   },
   {
    name: "C",
    flag: false
   }

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

this.filterOptions = {
  useExternalFilter: true
};

this.gridOptions = {
  filterOptions:  this.filterOptions
 };
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
4 109
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Самый простой способ сделать это — сначала отфильтровать данные по значению флага.

const filteredData = this.data.filter(item => !item.flag);

Затем установите этот filteredData как данные сетки

this.gridOptions.setRowData(this.filteredData);

Надеюсь, это сделает необходимое

Несмотря на то, что мы можем использовать api.setRowData(newData) для явного обновления/удаления ваших данных, этот метод существенно сбрасывает всю вашу сетку. Согласно документация это приводит к следующему:

the grid discards all previous selections and filters, and completely overwrites the old data with the new. This was the first way the grid worked and is the most 'brute force' way.

Таким образом, я бы порекомендовал вам использовать transaction.remove вместо этого. Согласно документация, вы можете либо указать rowNodeId для удаления строк, либо мы можем удалить строки, используя строки на основе ссылки на объект.

Этот метод предпочтительнее, т.

The grid keeps all active sorting, grouping and filtering, including updating to reflect the changes in the data should the sorting, grouping or filtering be impacted.

Во-первых, мы можем получить список объектов, которые необходимо удалить. Затем мы используем api.updateRowData(transaction) для выполнения транзакции для обновления данных строки, чтобы эти строки были удалены.

const removeData = this.data.filter(item => item.flag);
this.gridApi.updateRowData({ remove: removeData });

Я создал рабочая демонстрация, чтобы проиллюстрировать приведенное выше поведение.

@DilaniAlwis Ваш ответ на 100% правильный :) Я просто предлагаю альтернативное решение.

wentjun 30.05.2019 15:56
Ответ принят как подходящий

то, что вы хотите, это:

this.gridOptions = {
  // is always present, so return true
  isExternalFilterPresent: function() { 
    return true; 
  },

  // return true if flag=true
  doesExternalFilterPass: function(rowNode) { 
    return rowNode.data.flag; 
  }
};

см. Документы ag-Grid для более подробной информации

Если вы хотите фильтровать более динамично, вы можете использовать метод привязки

this.gridOptions = {
  // is always present, so return true
  isExternalFilterPresent: function() { 
    return true;
  }
}

ngOnInit() {
  this.gridOptions.doesExternalFilterPass = this.isVisible.bind(this)
}

isVisible(rowNode): boolean {
  // Write your logic. You can use rowNode and all component valiables.
}

Другие вопросы по теме