在 Angular 模板绑定中删除 html

Strip html in Angular template binding

我有一个显示数据的列表,有时可能包含 HTML

  <li *ngFor="let result of results">
    <span [innerHTML]="result.question.title">
    </span>
  </li>

使用 innerHTML 的问题在于 HTML 会被解析和呈现,因此 <p> 标签之类的东西会增加边距并破坏列表的对齐方式。

我想去掉所有 html 标签,只输出纯文本。

这样的方法:

  <li *ngFor="let result of results">
    <span>
        {{result.question.title}}
    </span>
  </li>

不剥离 HTML,它只是将 HTML 输出为纯文本。

如何删除 HTML 并以 'Angular' 方式保留纯文本?

我想没有直接的方法从字符串中剥离 HTML 标签,你可以使用 Pipe,写一个 "Pipe" 像这样:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'striphtml'
})

export class StripHtmlPipe implements PipeTransform {
    transform(value: string): any {
        return value.replace(/<.*?>/g, ''); // replace tags
    }
}

然后将 "StripHtmlPipe" 添加到您的模块 "declarations",完成这些步骤后,您可以在 HTML:

中使用此管道
<li *ngFor="let result of results">
    <span>
        {{result.question.title | striphtml}}
    </span>
  </li>

请注意上面的代码没有经过全面测试。

我不建议使用正则表达式来解析 html kite.js.org。请改用浏览器 textContent / innerText 函数:

htmlToText(html: string) {
    const tmp = document.createElement('DIV');
    tmp.innerHTML = html;
    return tmp.textContent || tmp.innerText || '';
}

这个应该靠谱多了。如果你愿意,你仍然可以使用管道,只是不要使用正则表达式来解析 html!