Обновлять ng2-smart-table при изменении массива

Привет и добрый день,

Создатель ng2-smart-table проинформировал меня о необходимости открыть здесь сообщение вместо отправки по электронной почте, чтобы другие программисты тоже могли получить пользу от этого вопроса. Я пытаюсь обновить таблицу данных при изменении массива, используемого для ее привязки. За ним стоит фильтр, который работает непосредственно с массивом, удаляя элементы или добавляя элементы. Вот простой пример того, как это работает сейчас:

let arr = [];
//fill arr with data
let arrayData = arr;

Как это работает, так как в html у меня есть [data] = 'arrayData'

Проблема в том, что это оказывается медленным фильтром, и я всегда создаю таблицу со всеми ее элементами. Я изменил метод фильтра, чтобы просто добавить или удалить необходимые элементы из массива, используя splice для удаления и push для добавления, поэтому я не буду каждый раз воссоздавать массив со всеми необходимыми элементами. Массив действительно меняется, и он работает, как задумано, но проблема в том, что измененный массив не влияет на данные, он продолжает показывать свое старое состояние, как если бы массив не был изменен. Я столкнулся с некоторыми решениями на форуме git hub datatable, но ни одно из них не работает в моем случае. Я считаю, что у меня есть некоторая разница в этом проекте. У меня есть компонент, который использует базу данных в качестве общей таблицы, используемой на некоторых страницах. Применяемый мной фильтр относится к определенной странице. На этой странице в моем HTML-коде есть что-то вроде этого:

<app-datatable id="tableSpecific" class="last-fixed" [(columns)]="columns" [data]="arrayData"[paging]='false' (emmitClick)="apply($event.data)"></app-datatable>

Компонент app-datatable имеет следующий HMLT:

<ng2-smart-table [settings]="config" [source]="data" (userRowSelect)="clickEmmiter($event)"></ng2-smart-table>

Итак, реализация моего фильтра, изменяющего массив, находится на другой странице. Единственное, что объединяет этих двоих, - это

[data]= array 

Что я могу сделать, чтобы принудительно обновить или что-то в таблице данных?


person Marcus V. B. Siqueira    schedule 04.06.2019    source источник


Ответы (1)


Если вы заглянули в ng2-smart, он не знает, что вы обновили массив снаружи, единственный способ - передать новый массив, что вы можете сделать так

arrayData = [...arrayData];

ng2-smart-table имеет класс-оболочку, который вы можете использовать для обновления вашего массива.

import { LocalDataSource } from 'ng2-smart-table';

Вы можете передать свой массив в эту оболочку и управлять своим массивом с помощью его функций, проверьте код https://github.com/akveo/ng2-smart-table/blob/master/src/ng2-smart-table/lib/data-source/local/local.data-source.ts.

Он имеет функции для добавления, добавления, удаления и т. Д.

Пример использования того, как передать массив в оболочку LocalDataSource https://akveo.github.io/ng2-smart-table/#/examples/using-filters

person than    schedule 05.06.2019