2017-03-10 88 views
1

可以說我在數據庫中有這個字符串。從字符串編譯角度2 html

databaseEntry = "<span (click)="togleShowDetails()">click here</span>" 

我希望它能像我將相同的字符串直接放入我的代碼一樣工作。 我嘗試這樣做:

<p [innerHTML]="databaseEntry"></p> 
<span (click)="someFunction()">click here</span> 

兩條線都呈現視覺上相同,但點擊功能,因爲其實生成的HTML不同的是僅適用於第二。

<span>click here</span> 
<span _ngcontent-qdv-71="" data-vivaldi-spatnav-clickable="1">click here</span> 

這是因爲第一個不是角度再生。

所以問題是使用什麼來代替innerHTML。 我找到了一些答案,但沒有人考慮隨機輸入字符串或缺少某些至關重要的東西。

回答

0

我同意米拉德指示可以是一個很好的方法,但我沒有找到解決方案,也許有人需要更聰明的人。

但是,我們找到了一個解決辦法:

innerText = <string>this.sanitizer.bypassSecurityTrustHtml(this.parseMessage(databaseEntry)); 

但比你需要添加自定義監聽器:

setTimeout(() => { 
    try { 
     document.getElementById(IDinDatabaseentryhtmlstring).addEventListener("click",() => this.myClick(LINKinDatabaseEntryHtmlString)); 
    } 
    catch (e) { 
     console.log("cannot find element"); 
     return; 
     } 
}, 0) 
0

您應該創建一個指令,接受一些文本作爲輸入,然後編譯並創建一個組件,然後將其放入元素中。

看看ngIf,這有點類似。