I tried using making it using dynamic HTML but I unable to call click event in dynamic HTML.
This is what is tried by myself
my .ts file
htmlgrid:any;
jsonData:any;
ngOnInit(){
this.htmlgrid= this.parse(this.jsonData)
}
createRow (r) {
return '<div style="background-color : ' + r.color + '" class="row">' +
(r.text ? r.text : '') + this.parse(r) + '</div>';
}
createColumn (c) {
return '<div style="background - color: red;" class="col-md-' + 6 + ' test">' +
(c.text ? c.text : '') + this.parse(c) + '<img click="hell();" src = "../../../../assets/img/collection.jpg" style = "height: 100px; width:auto;" />' + '</div>';
}
parse (s) {
let S = '';
if (s.rows) {
for (let i in s.rows) {
console.log(s.rows[ i ], 'i of data');
S += this.createRow(s.rows[ i ]);
}
}
if (s.columns) {
for (let i in s.columns) {
S += this.createColumn(s.columns[ i ]);
}
}
console.log(S, 'value of s');
return S;
}
My.html file
<div class="one" [innerHtml]="htmlToAdd"></div>
this type of JSON is used for making rows and columns,we also have identifiers and row-column checks in our JSON. Please help I got stuck here so bad, i need to make grid of row and columns on the basis of below json
this.jsonData={
"rows":[
{
"columns":[
{
"identifier":"c1",
"hasRows":false,
"cashBack":{
"text":""
},
"title":{
"text":""
},
"images":{
"leafBanner":{
"url":"",
"bannerName":"",
"bannerType":"",
"bannerTarget":""
},
"listPageBanner":{
"image":"",
"2X":{
"height":"200px",
"width":"400px"
},
"3X":{
"height":"300px",
"width":"600px"
}
}
},
"height":"50",
"width":"50"
},
{
"identifier":"c2",
"hasRows":false,
"cashBack":{
"text":""
},
"title":{
"text":""
},
"images":{
"leafBanner":{
"url":"",
"bannerName":"",
"bannerType":"",
"bannerTarget":""
},
"listPageBanner":{
"image":"",
"2X":{
"height":"200px",
"width":"400px"
},
"3X":{
"height":"300px",
"width":"600px"
}
}
},
"height":"50",
"width":"50"
}
]
},
{
"columns":[
{
"identifier":"c3",
"hasRows":false,
"cashBack":{
"text":""
},
"title":{
"text":""
},
"images":{
"leafBanner":{
"url":"",
"bannerName":"",
"bannerType":"",
"bannerTarget":""
},
"listPageBanner":{
"image":"",
"2X":{
"height":"200px",
"width":"400px"
},
"3X":{
"height":"300px",
"width":"600px"
}
}
},
"height":"33",
"width":"33"
},
{
"identifier":"c4",
"hasRows":false,
"cashBack":{
"text":""
},
"title":{
"text":""
},
"images":{
"leafBanner":{
"url":"",
"bannerName":"",
"bannerType":"",
"bannerTarget":""
},
"listPageBanner":{
"image":"",
"2X":{
"height":"200px",
"width":"400px"
},
"3X":{
"height":"300px",
"width":"600px"
}
}
},
"height":"33",
"width":"33"
},
{
"identifier":"c5",
"hasRows":false,
"cashBack":{
"text":""
},
"title":{
"text":""
},
"images":{
"leafBanner":{
"url":"",
"bannerName":"",
"bannerType":"",
"bannerTarget":""
},
"listPageBanner":{
"image":"",
"2X":{
"height":"200px",
"width":"400px"
},
"3X":{
"height":"300px",
"width":"600px"
}
}
},
"height":"33",
"width":"33"
}
]
}
]
}
You can define a component which will generate your html and you can call it recursively
You can call this grid component from your app/display component like this
This is a head start you can modify the the default switch case to cater to your needs I just did find an attribute
hasRows
in your json if that's true it will recursively call grid component back again.Hope it helps, Stackblitz for your reference: https://stackblitz.com/edit/angular-6cqbsg