22

As I know, in angular 1.x I can use $sce service to meet my requirment like this

myApp.filter('trustAsHTML', ['$sce', function($sce){
  return function(text) {
    return $sce.trustAsHtml(text);
  };
}]);

and in html file use like this

{{ htmlString || trustAsHTML }}

Does there has a service like $sce or some pipe or any method can be competent to do that in angularjs 2 version?

5 Answers 5

35

Simplest solution:

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

Where some_string can be html code, e.g: some_string = "<b>test</b>".

No pipes or anything needed. Supported by Angular 2.0

Sign up to request clarification or add additional context in comments.

3 Comments

How can I have two space-separated properties inside innerHTML. Like prop1_value prop2_value. Without creating any method to concat them.
Try doing something like [innerHTML]="{prop1_value + ' ' + prop2_value}"
It didn't work like this. I added a new span and added that prop value there.
30

In angular2 there's no ng-include, trustAsHtml, ng-bind-html nor similar, so your best option is to bind to innerHtml. Obviously this let you open to all kind of attacks, so it's up to you to parse/escape the content and for that you can use pipes.

@Pipe({name: 'escapeHtml', pure: false})
class EscapeHtmlPipe implements PipeTransform {
   transform(value: any, args: any[] = []) {
       // Escape 'value' and return it
   }
}

@Component({
    selector: 'hello',
    template: `<div [innerHTML]="myHtmlString | escapeHtml"></div>`,
    pipes : [EscapeHtmlPipe]
})
export class Hello {
  constructor() {
    this.myHtmlString = "<b>This is some bold text</b>";
  }
}

Here's a plnkr with a naive html escaping/parsing.

I hope it helps :)

5 Comments

Looks like the syntax is now [innerHTML]: stackoverflow.com/a/34424375/86937
This isn't sufficient for cases where your innerHTML actually contains angular-usable code. In my case, I want to be able to use [routerLink], but I can't.
@thouliha did you ever figure out a solution to that?
@Tucker nope. Once you use [innerHTML], you lose all templating abilities. Angular seems to really want you to do all your templating directly in static html.
the solution in the plnkr is only for <b> tag, how to handle for any(all) html tag?
4

I got Same Problem buy I Request the decode HTML from Backend and them you can inject html to your page

// YOUR TS
@Component({
  selector: 'page',
  templateUrl: 'page.html'
})
export class Page {
  inject:any;
  constructor( ) { }

  ionViewDidLoad() {
    this.inject='your HTML code'

  }

}
// YOU HTML PAGE

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

Comments

0

The best solution which can be of your help is as below:

<p [innerHTML]=your_response_which_is_string></p>

Hope it helps!!!

Comments

-1

For property binding use below : <div innerHtml="{{ property }}"></div>

For just a string : <div [innerHtml]="<p>property</p>"></div>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.