如何允许html返回angular2管道?

rgb*_*rgb 46 pipe angular

我有一个管道返回一个html字符串,但字符串输出转发可能是安全的默认值.我确定必须有一个选项允许html而不能在我搜索文档时找到它.

如何告诉管道允许实际的html渲染?

ale*_*ods 88

使用绑定innerHTMLouterHTML渲染已经转义的HTML.例如<span [innerHTML]="someString | toHtmlPipe"></span>.看到这个插件:

@Pipe({
  name: 'wrapBold'
})
class WrapBold {
  transform(content) {
    return `<b>${content}</b>`;
  }
}

@Component({
  selector: 'my-app',
  pipes: [WrapBold],
  template: `
    <div>
      Hello <span [outerHTML]="content | wrapBold"></span>
    </div>
  `
})
export class App {
  constructor() {
    this.content = 'Angular2'
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这完全回答了你的要求.您应该更新答案,以更准确地了解您要查找的内容或接受它. (8认同)
  • @MarkRajcok实际上它只是es2015 [模板字符串表达式插值](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/template_strings#Expression_interpolation)([这里](http://www.ecma- international.org/ecma-262/6.0/#sec-template-literal-lexical-components)是规范).几乎所有主流浏览器都支持它(例如尝试在Chrome控制台中使用`\`Date $ {Date.now()} \``. (2认同)

rgb*_*rgb 8

所以感谢回复.

使用@alexpods建议的outerHTML绑定是一种享受.根本不需要改变我的管道.

所以我之前做的是:

{{'TEXT' | hn: 'h2.whatever'}} 这导致正确的HTML但逃脱了ie.

&lt;h2 class="whatever"&gt;TEXT&lt;/h2&gt;

效果很好: <span [outerHTML]="'TEXT' | hn:'h2.whatever'"></span>

哪个输出: <h2 class="whatever">TEXT</h2>

  • 很快就会说...它只是第一次工作,如果你正在更新视图,例如更新细节的菜单,下一次它将失败并出现以下错误"无法设置'outerHTML'属性'元素':此元素没有父节点"可能是因为之前的转换. (2认同)
  • 我遇到了同样的问题,我通过将 `span` 更改为 `div` 并使用 `innerHTML` 而不是 `outerHTML` 来修复它,因此对于您的示例:`&lt;div [innerHTML]="'TEXT' | hn:' h2.whatever'"&gt;&lt;/div&gt;` (2认同)

Mar*_*cok 7

我不知道管道是否可行.(是的,请参阅@ alexpods的回答.)

您是否考虑过将管道转换为具有输入属性的组件?即,无论是给你的管子喂食什么,都要把它作为组件的输入属性.将管道生成的HTML放入组件的模板中.