2017-06-17 116 views
0

我有一个我想要在primeng数据表中显示的人员列表。 person对象具有此字段(firstName,lastName,continentsVisited)。 continentVisited字段是由该人访问的大陆阵列。这continentsVisited是动态的。除了firstName和lastName之外,我想要的是为每个访问的大陆设置一个单独的列。添加动态列primeNG Angular 2.为数组中的每个对象创建列

export class AppComponent { 
    persons: any [] = [ 
     {"firstName": "paolo","lastName":"revira","continentsVisited": [ 
       { "continent":"Europe", "name": "UK" }, 
       { "continent":"Asia", "name": "China" }, 
       { "continent":"North America", "name": "US" } 
      ]}, 
     {"firstName": "kenneth","lastName":"santos"},"continentsVisited": [ 
       { "continent":"Europe", "name": "France" }, 
       { "continent":"Asia", "name": "Japan" }, 
       { "continent":"North America", "name": "Canada" } 
      ]}, 
     {"firstName": "chris","lastName":"kenndy"},,"continentsVisited": [ 
       { "continent":"Europe", "name": "Germany" }, 
       { "continent":"Asia", "name": "Philippines" }, 
       { "continent":"North America", "name": "Mexico" } 
      ]}, 
     ]; 

    ngOnInit() { 

    } 
} 


<p-dataTable [value]="persons" [editable]="true" resizableColumns="true" reorderableColumns="true"> 
    <p-column field="firstName" header="First Name" [editable]="true"></p-column> 
    <p-column field="lastName" header="Last Name"></p-column> 
</p-dataTable> 

我为此创建了一个plunkr。这里的链接https://plnkr.co/edit/gS1wsI?p=preview

enter image description here

回答

1

您可以使用下面的代码,

<p-dataTable [value]="persons"> 
    <p-column *ngFor="let col of cols" [field]="col.field" [header]="col.header"></p-column> 
</p-dataTable> 

打字稿代码

export class App { 
    name:string; 
    value:any; 
    persons: any [] = [ 
     {"firstName": "paolo","lastName":"revira","continentsVisited": [ 
       { "continent":"Europe", "name": "UK" }, 
       { "continent":"Asia", "name": "China" }, 
       { "continent":"North America", "name": "US" } 
      ]}, 
     {"firstName": "kenneth","lastName":"santos","continentsVisited": [ 
       { "continent":"Europe", "name": "France" }, 
       { "continent":"Asia", "name": "Japan" }, 
       { "continent":"North America", "name": "Canada" } 
      ]}, 
     {"firstName": "chris","lastName":"kenndy","continentsVisited": [ 
       { "continent":"Europe", "name": "Germany" }, 
       { "continent":"Asia", "name": "Philippines" }, 
       { "continent":"North America", "name": "Mexico" } 
      ]} 
     ]; 
cols:any[]=[]; 
    constructor() { 
    Object.keys(this.persons[0]).forEach(item=>{ 
     console.log(item) 
     this.cols.push({field: item, header: item}); 
    }) 
    console.log(this.cols ); 
    this.name = `Angular Prime Data table Dynamic columns` 
    } 

更新1:基于截图

HTML的样子

<p-dataTable [value]="newPersons"> 
    <p-column *ngFor="let col of cols" [field]="col.field" 
       [header]="col.header"></p-column> 
</p-dataTable> 

打字稿代码:

for(let i =0 ; i <this.persons.length;i++){ 
    let temp={ 
    firstName : this.persons[i].firstName, 
    lastName : this.persons[i].lastName 
    } 
    this.persons[i].continentsVisited.forEach(item=>{ 
    let keyValue = Object.values(item); 
    console.log(keyValue) 
    temp[keyValue[0].toString()] = keyValue[1] 

} 
this.newPersons.push(temp); 
} 
console.log(this.newPersons) 
Object.keys(this.newPersons[0]).forEach(item=>{ 
    this.cols.push({field: item, header: item}); 
}) 

注:更新在下面的演示

LIVE DEMO

+0

我想是每个大陆参观了各科拉姆分隔。我该怎么做 – ilovejavaAJ

+0

你可以用你期望的版面来更新帖子,它可以帮助我。 – Aravind

+0

已经更新了样本布局问题 – ilovejavaAJ

相关问题