2017-02-23 39 views
2

У меня есть проблема с datatable primeNG, при обновлении datasouce данные не обновляются автоматически. У меня есть два типа данных в разных компонентах, которые общаются через службу, при нажатии на одну строку в первом datatable вызывается метод, который обновляет источник данных, однако второй datatable не распознает его. Может быть, у кого-то была аналогичная проблема или есть пример того, как решить такие проблемы с помощью prnatable? Буду признателен за любую помощь.primeNG Datatable не обновляется при изменении данных datasource

+1

Привет @Memuva Добро пожаловать в переполнение стека. Это поможет нам помочь вам, если вы сможете воспроизвести это на https://jsfiddle.net/ или подобных сайтах, чтобы мы могли проверить код в изолированном контексте. –

+0

Я добавил здесь аналогичный проект (без модулей узла). Https: // expirebox.com/download/fd34cfeb74a86aeb4ed9cfc96f7bf7cd.html при вызове метода getScriptsByMaterialnumber() в Сервисе правильные скрипты хранятся в переменной materialnumberScripts, однако script.componentent не распознает, что изменяется источник данных -> materialnumberScripts. – Memuva

+0

. Я заставил его работать с OnChangeEvent и прямой ParentChildRelationship между materialnumber.component и script.component https://expirebox.com/download/35286dc04662e4be570b6652b398482f.html, но это не то, что я хочу, я хотел бы иметь эту функциональность в Сервисе. Кто-нибудь знает, как это может работать? – Memuva

ответ

1

Я нашел решение для этого здесь: datatable issue on github

Я испытал это и работает:

this.myDatasource = new Array; 
this.myDatasource = myNewValuesFromService; 
3

в моем случае: нажимные данные в tableData массив, а затем скопировать сам tableData массив (используйте slice())

export class DataTableComponent{ 
    tableData=[]; 
    county={id:1,name:"china"} 
    onAdd(){ 
     this.tableData.push(Object.assign({}, this.country)); 
     this.tableData=this.tableData.slice(); 
    } 
} 

и работает

0

Я использовал подход Энн, и он отлично работал для меня. Проблема была в том, что в обратном вызове службы я использовал array[index] = new_value, а dataTable не знал об изменениях.

Добавив slice(), он отлично работал.