2017-02-28 37 views
1

在Angular2部件我有以下空:Angular2表示IE

<div ng-if="heading" [innerHTML]="heading"></div>

鉻& Safari瀏覽器很好地工作 - 但IE是表示在DIV null。我不知道爲什麼...標題是undefined,仔細檢查!

+0

你目前用於IE的什麼polyfill?通常你至少需要核心js。 –

+1

用* ngIf =「heading」代替它 –

回答

4

正確的語法在Angular2應該是

<div *ngIf="heading" [innerHTML]="heading"></div> 
+0

我簡直不敢相信那是那麼簡單.....謝謝。 任何想法爲什麼ng-if在Chrome中工作? – Silver

+0

我想鉻仍然支持Angular 1風格&對於IE,你需要添加額外的polyfill ... 你可以接受這個答案,如果它有幫助:p –

+1

它不適用於Chrome或Safari。當標題未定義時,它們不會放入IE所做的「空白」。如果您查看了元素面板,那麼當您使用ng-if時,您會看到內容仍然存在。 –

0

它是*ngIf

<div *ngIf="heading" [innerHTML]="heading"></div> 
0

Angular2 NgIf語法:

<div *ngIf="condition">...</div> 
<div template="ngIf condition">...</div> 
<template [ngIf]="condition"><div>...</div></template> 

實施例:

<div *ngIf="errorCount > 0" class="error"> 
    <!-- Error message displayed when the errorCount property in the current context is greater than 0. --> 
    {{errorCount}} errors detected 
</div> 
2

對於那些誰不喜歡,你必須做ngIf每當innerHTML的可能是不確定的事實,這裏的跨您的應用程序解決了一個解決方案:

constructor(sanitize: DomSanitizer) { 
    // override the sanitize method so that it returns an empty string instead of null so that IE doesn't show "null" in the DOM 
    sanitize.sanitize = function(context: SecurityContext, value: SafeValue | string | null) { 
     return (sanitize as any).__proto__.sanitize.call((sanitize as any), context, value) || ''; 
    }; 
} 

我把這個在app 。模塊構造函數。

你可能會問,「爲什麼這樣一個hacky的方法?」這很大程度上是因爲DomSanitizer是一個充當類的接口。真正的衛生處理髮生在未公開暴露的DomSanitizerImpl類中。

+0

這很有趣,但爲什麼其他瀏覽器在這裏以不同的方式處理? – jsgoupil

+1

@jsgoupil IE似乎將「null」的innerHTML和textContent值視爲字符串值「null」。它可能會這樣做,因爲null是一個對象:http://www.ajaymatharu.com/javascript-difference-between-undefined-and-null/其他瀏覽器知道null被定義爲缺少內容 –

+0

事實上,它必須是那。 我剛剛嘗試'$ 0.innerHTML = null;'在瀏覽器和邊緣行爲就像寫入NULL值。 – jsgoupil