I have used one pipe to truncate ,Working fine with normal text but not in html content
app.html
  <tr>
  <td>{{howtoreach?.content|truncate :40}}</td>  //html content.not working
  <td>{{howtoreach?.id}}</td>                   //Working
  <td>
I have used one pipe to truncate ,Working fine with normal text but not in html content
app.html
  <tr>
  <td>{{howtoreach?.content|truncate :40}}</td>  //html content.not working
  <td>{{howtoreach?.id}}</td>                   //Working
  <td>
I had the same problem, and realised that it was difficult to find an Angular 2 solution with innerHTML.
You could create a custom function like this:
truncateHTML(text: string): string {
    let charlimit = 160;
    if(!text || text.length <= charlimit )
    {
        return text;
    }
  let without_html = text.replace(/<(?:.|\n)*?>/gm, '');
  let shortened = without_html.substring(0, charlimit) + "...";
  return shortened;
}
And then in your view:
<div [innerHTML]="truncateHTML(html_string)"></div>
That should work.
Last comment
I'm using innerHTML because there is still a bunch of unformatted characters like:
ø æ  
Especially if you're from a nordic country with æ, ø and å :)
Regex is from: StripHTML post.
I had to replace breaks <br /> before replacing HTML, so the word at the end of a line (before a line break) and the next (first word on line) had space in between them when shown:
let adding_spaces = text.replace(/<br \/>/g, " ");
 
    
    