I am creating a dynamic table using Angular2. I have created an angular2 component with 2 pipes: 1st pipe gets the key from the JSON object which is used as the column for the table (working perfectly), whereas 2nd pipe must get the value from JSON object (not working) the result which I am getting is [object Object]
but not the value, sorry if this question was duplicated, I can't able to find any solution elsewhere in the WEB so am posting this, Please help me to resolve this issues
The below is my code for your reference
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
rowData=[
{"Sno":"1","Particulars":"Test","Amount":"1000"},
{"Sno":"2","Particulars":"Sample","Amount":"10000"}
];
}
Pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'getjsoncolKeys' })
export class KeysPipe implements PipeTransform {
transform(value, args: string[]): any {
let keys = [];
for (var i = 0; i < value.length; i++) {
for (let key in value[i]) {
if (keys.indexOf(key) === -1) {
keys.push(key);
}
}
}
return keys;
}
}
@Pipe({ name: 'getjsonvalues' })
export class getjsonValues implements PipeTransform {
transform(value, args:string[]) : any {
let values = [];
for(var i=0; i<value.length;i++){
for (let key in value) {
values.push(value[key]);
}
}
return values;
}
}
app.component.html
<table>
<tr>
<th *ngFor='let column of rowData | getjsoncolKeys'>{{column}}</th>
</tr>
<tr>
<td *ngFor='let row of rowData | getjsonvalues'>{{row}}</td>
</tr>
</table>
You problem is incorrect usage of rowData
.
@Pipe({ name: 'getjsoncolKeys' })
export class KeysPipe implements PipeTransform {
transform(value, args: string[]): any {
return Object.keys(value);
}
}
@Pipe({ name: 'getjsonvalues' })
export class ValuesPipe implements PipeTransform {
transform(value, args:string[]) : any {
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
// return Object.values(value);
// Pipe from Günter !!
let keys = Object.keys(value);
console.log(keys.map(k => value[k]));
return keys.map(k => value[k]);
}
}
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
<table>
<tr>
<!-- use first element to get the keys -->
<th *ngFor='let column of rowData[0] | getjsoncolKeys'>{{column}}</th>
</tr>
<!-- iterate through all elemnts -->
<tr *ngFor="let row of rowData">
<td *ngFor='let val of row | getjsonvalues'>{{val}}</td>
</tr>
</table>
`,
})
export class App {
name:string;
rowData = [
{"Sno":"1","Particulars":"Test","Amount":"1000"},
{"Sno":"2","Particulars":"Sample","Amount":"10000"}
];
constructor() {
this.name = 'Angular2'
}
}
See my live demo: https://plnkr.co/edit/VvxBShlYAvGt8nf9XC0K?p=preview
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With