サーバーから取得したHTMLをangular2のDOM要素に挿入したいと思います。私はこれを行うための最良の/正しい方法を理解できないようです。
angular 2は自動的にHTMLをエスケープするため、{{my_data}}をテンプレートに入れることはできません。
要素のinnerHTMLに直接値を割り当てるだけのhtml-unsafeディレクティブを書き込もうとしました。
/// <reference path="../../typings/typings.d.ts" />
import {Directive} from 'angular2/angular2';
import {ElementRef} from 'angular2/core';
@Directive({
selector: "[html-unsafe]",
properties: ['htmlUnsafe']
})
export class HtmlUnsafe{
constructor(private elem: ElementRef){
}
set htmlUnsafe(value){
setTimeout(() => {
this.elem.nativeElement.innerHTML = value;
},0);
}
}
だから今私のテンプレートには次のようなものがあります
<td [html-unsafe]="my_data"></td>
これは機能しますが、これを行う正しい方法かどうかはわかりません。setTimeoutは奇妙な回避策のようです。 setTimeoutがないと、this.elem.nativeElement
は、実際にはDOM要素を参照するのではなく、ある種の一時要素を参照します。
HTMLをDOMに挿入するだけのより「正しい」angular2の方法はありますか? DOM操作をsetTimeoutでラップする必要があるのはなぜですか?
この記事を読む http://www.beyondjava.net/blog/angularjs-2-0-sneak-preview-data-binding/ 2014年11月から。
ng-bind-html becomes [innerHTML].
これで試すことができます。
私は次の方法でそれを行うことができました:
<td bind-inner-html="my_data"></td>