Angular innerHTML property not working while try to render button control
Asked Answered
E

2

10

I have created angular application.in here, i want to inject some content using [innerHTML] property like below

export class AppComponent  {
  name = 'Angular';
  public bar = 'bars';
  foo = `<div>`+this.bar+`
  </div>
  <button type="button" onclick="alert('Hello world!')">Click Me!</button>
`;
}

I have used this in html file like below

<div [innerHTML]="foo"></div>

But I just simply return only div element. button control is not getting rendered.

I have created a stackb sample for your reference. please provide any idea how to do it

sample - https://stackblitz.com/edit/angular-ena2xj?file=src/app/app.component.ts

Reference - Angular HTML binding

Expand answered 24/5, 2019 at 6:50 Comment(10)
Better Use renderer2 service: alligator.io/angular/using-renderer2Atalanta
@Chellappan, Hi Bro, why not we use @viewChild??Raja
Better way to manipulte DOM in angular is using Render2 service.Atalanta
@Chellappan, Okay bro, using Render2 service might be also a good solution i hope..Raja
hi @Chellappan, is there any guidelines available to use render 2 serviceExpand
Hi @kumaresan_sd Check this:alligator.io/angular/using-renderer2Atalanta
thanks @Chellappan, but i don't need thisExpand
HI @ManirajfromKarur, i have one more scenario, how to achieve this stackblitz.com/edit/angular-phv9ry?file=src/app/…Expand
i have created one component and i want to render it using this innerHTML propertyExpand
reference - #56289632Expand
A
20

you should use DomSanitizer

import { Component } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser'
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
        constructor(private sanitized: DomSanitizer) {}

   name = 'Angular';
  public bar = 'bars';
  foo = this.sanitized.bypassSecurityTrustHtml( `<div>`+this.bar+`
  </div>
  <button type="button" onclick="alert('Hello world!')">Click Me!</button>
`);
}
Afton answered 24/5, 2019 at 7:1 Comment(4)
HI @devraj, Thanks for your quick reply. it is working fineExpand
I have one more doubt. is is possible to create another component and use hereExpand
that is not possible.Afton
What about adding attribute binding to the foo? @DevrajsTelpherage
R
1

You can change it to @ViewChild,

Change your ts file like this,

export class AppComponent  {
  @ViewChild('someVar') el:ElementRef;
  name = 'Angular';
  public bar = 'bar';
  ngAfterViewInit() {
  this.el.nativeElement.innerHTML = `<div>`+this.bar+`
  </div><button type="button" onclick="alert('Hello world!')">Click Me!</button>`;
}
}

Working Stackblitz https://stackblitz.com/edit/angular-vnk9ft

Raja answered 24/5, 2019 at 7:5 Comment(3)
@kumaresan_sd, Why don't you want to use ViewChild ??Raja
i don't want to take element reference because i have to inject this in multiple elements.Expand
@kumaresan_sd, Okay this question #48879907 propose both solutions, and another answer deals with first solution of it.. Hope you got better solution for your problem..Raja

© 2022 - 2024 — McMap. All rights reserved.