您好,登錄后才能下訂單哦!
前言
在開始本文的正文之前,我們先來看一下angular2中將帶標簽的文本輸出在頁面上的相關內容,為了系統性的防范XSS問題,Angular默認把所有值都當做不可信任的。 當值從模板中以屬性(Property)、DOM元素屬性(Attribte)、CSS類綁定或插值表達式等途徑插入到DOM中的時候, Angular將對這些值進行無害化處理(Sanitize),對不可信的值進行編碼。
h4>Binding innerHTML</h4> <p>Bound value:</p> <p class="e2e-inner-html-interpolated">{{htmlSnippet}}</p> <p>Result of binding to innerHTML:</p> <p class="e2e-inner-html-bound" [innerHTML]="htmlSnippet"></p>
[innerHTML]="htmlSnippet"
這個屬性可以識別 HTML標簽 但不識別標簽中的屬性值
發現問題
大家都知道Angular 中有 innerHTML 屬性來設置要顯示的內容,但是如果內容包含 CSS 樣式,無法顯示樣式的效果。
比如:
public content: string = "<div style='font-size:30px'>Hello Angular</div>"; <p [innerHTML]="content"></p>
只會顯示 Hello World ,字體不會是 30px,也就是 CSS 樣式沒有效果。
解決方案
自定義一個 Pipe 來對內容做轉換。看下面代碼。
寫一個 HtmlPipe 類
import {Pipe, PipeTransform} from "@angular/core"; import {DomSanitizer} from "@angular/platform-browser"; @Pipe({ name: "html" }) export class HtmlPipe implements PipeTransform{ constructor (private sanitizer: DomSanitizer) { } transform(style) { return this.sanitizer.bypassSecurityTrustHtml(style); } }
在需要的模塊里面引入管道 HtmlPipe
@NgModule({ declarations: [ HtmlPipe ] })
在 innerHtml 中增加管道名字
<p [innerHTML]="content | html"></p>
這樣就可以顯示 content 的 CSS 樣式。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。