Angular — устранение неполадок vm-ware datagrid clrDgRefresh

Мне нужен способ отменить событие, созданное сеткой данных Clearness, чтобы я извлекал данные из серверной части только после того, как пользователь закончил печатать. Я использую сетку в приложении angular 6 и привязываю событие к своей функции. Моя установка выглядит следующим образом,

<clr-datagrid (clrDgRefresh) = "fetchData($event)"></clr-datagrid>

fetchData(state) {
  // Fetch data from back end
}

Как отменить событие, чтобы оно не запускало мою функцию fetchData при каждом нажатии клавиши? У меня нет дескриптора ни одного из входных данных фильтра данных, и я не знаю, сколько входных данных будет. Все, что у меня есть, это событие, которое запускается, когда на любом из входов фильтра сетки есть клавиша.

Возможный дубликат Угловой и устранение дребезга

Igor 12.03.2019 22:16

не дубликат выше

Jimmy Fencer 12.03.2019 23:02
Тестирование функциональных 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
0
2
590
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете отменить дребезг событий на стороне приложения с помощью оператора rxjs debounceTime

Настройте тему, которая действует как поток состояний сетки данных.

debouncer = new Subject<any>();

Передайте состояния дебаунсеру:

refresh(state: ClrDatagridStateInterface) {
  this.debouncer.next(state);
}

Подпишитесь на дебаунсер и используйте debouceTime

this.debouncer.asObservable().pipe(
      debounceTime(2000)
    ).subscribe(state => {
      this.loading = true;
      const filters: { [prop: string]: any[] } = {};
      if (state.filters) {
        for (const filter of state.filters) {
          const { property, value } = <{ property: string; value: string }>filter;
          filters[property] = [value];
        }
      }
      this.inventory
        .filter(filters)
        .sort(<{ by: string; reverse: boolean }>state.sort)
        .fetch(state.page.from, state.page.size)
        .then((result: FetchResult) => {
          this.users = result.users;
          this.total = result.length;
          this.loading = false;
        });
    })

Это быстрый POC, поэтому, очевидно, его также можно напечатать для интерфейса состояния сетки данных или улучшить другими способами (например, добавить больше операторов rxjs для обработки других вариантов использования). Кроме того, это должно дать вам представление о том, как это приложение может нейтрализовать события сетки данных.

Вот рабочий POC на стекблиц.

Спасибо за это решение. Очень признателен

Jimmy Fencer 18.03.2019 14:36

Ссылка на Stackblitz не работает. Не могли бы вы обновить его?

shravan 22.05.2021 13:29

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