HtmlをinnerHtmlとしてビューに渡します。以下は私の見解です
<div [innerHTML]="someHtmlCode"></div>
以下のコードを渡すと、正常に機能します。
this.someHtmlCode = "<div><b>This is my HTML.</b></div>"
色を含む以下のコードを渡すと、機能しません。
this.someHtmlCode = '<div style="background-color: blue;"><b>This is my HTML.</b></div>';
この動作は正常です。デフォルトでカプセル化はinnerHTML
であるため、Emulated
に追加されたクラスは無視されます。つまり、Angularは、スタイルがコンポーネントの内側と外側をインターセプトするのを防ぎます。コンポーネントのカプセル化をNone
に変更する必要があります。このようにして、クラスを任意の場所で定義できます。styles
内、または別個の.css
、.scss
、または.less
スタイルシート(そうではありません) matter)とAngularはDOMに自動的に追加します。
import { Component, ViewEncapsulation } from '@angular/core';
@Component({
selector: 'example',
styles: ['.demo {background-color: blue}'],
template: '<div [innerHTML]="someHtmlCode"></div>',
encapsulation: ViewEncapsulation.None,
})
export class Example {
private someHtmlCode = '';
constructor() {
this.someHtmlCode = '<div class="demo"><b>This is my HTML.</b></div>';
}
}
私も同じ問題に直面していましたが、以下のリンクを読んだ後、私は解決策を見つけました、それはパイプを使用せずに行われました
これがあなたのお役に立てば幸いです。
https://netbasal.com/angular-2-security-the-domsanitizer-service-2202c83bd9
インラインスタイルの代わりに、スタイルをクラスに入れます。
class
の使用がオプションかどうかはわかりませんが、ここにPlunker demo があります。
HTML:
this.someHtmlCode = '<div class="demo"><b>This is my HTML.</b></div>'
CSS:
.demo{
background-color: blue;
}