2017-10-19 2 views
0

J'ai [value]="rows[indexString]" pour dataTable dans le modèle. Dans le composantTable de données PrimeNG non 'recharger' table

rows: any = {} 
newrow: any = {} 
... 
addNewRow(key: string) { 

    let rows = {...this.rows} 
    let newrow = {_key: Math.floor(Math.random() * 10000), title: this.newrow.title} 

    if (rows[key]) { 
    rows[key].push(newrow) 
    } else { 
    rows[key] = newrow 
    } 

    this.rows = rows 

} 

Fondamentalement, je suis suivant tutoriel de here

Seule la première rangée rendu dans le tableau, dans le modèle {{rows | json}}, tout est là:

{ 
    "210386": [ 
    { 
     "_key": 9173, 
     "title": "Row one" 
    }, 
    { 
     "_key": 6201, 
     "title": "Row Two" 
    } 
    ] 
} 

Répondre

3

Dans votre cas, this.rows est un object, pas un array.

Je pense que le problème est peut-être la façon dont vous copiez this.rows. Vous utilisez l'opérateur de propagation pour créer un nouvel objet à partir de la copie this.rows. Ce que vous voulez, c'est un tableau.

Essayez ceci:

let rows = [...this.rows] 

EDIT: Je vais terminer ma réponse. Le problème est que la référence à votre objet est perdue lors de la copie des lignes et de leur réaffectation. Ensuite, l'observation des changements ne peut pas se produire.

Ce que vous devez copier est la baie avec laquelle vous travaillez actuellement. Pas tout l'objet.

addNewRow(key: string) { 

    let newrow = {_key: Math.floor(Math.random() * 10000), title: this.newrow.title} 

    let rows = []; 

    if (this.rows.hasOwnProperty(key)) { // check is key already exists 
     rows = [...this.rows[key], newRow]; 
    } else { 
     rows = [newRow] 
    } 

    this.rows[key] = rows; 

    } 
+0

Nécessité de faire l'objet de tableaux ... – miff

+0

je modifiée pour être plus précis –

+0

Juste à temps droit, ce travail parfait. J'abandonne pour p-dataTable et commencez la table «normale», évidemment suis trop pensant, c'est la solution gentille et simple – miff