2015-11-02 55 views
19

HTML字符串真正的HTML元素转化据我所知,在角1.x中,我可以使用$ SCE的服务来满足需求量的我这样如何通过NG-对角2

myApp.filter('trustAsHTML', ['$sce', function($sce){ 
    return function(text) { 
    return $sce.trustAsHtml(text); 
    }; 
}]); 

和HTML这样

{{ htmlString || trustAsHTML }} 

文件使用是否存在有一个像$ SCE或某些管道或任何方法的服务可以胜任,在angularjs 2版本?

回答

22

在angular2中没有ng-include,trustAsHtml,ng-bind-html也没有类似,所以你最好的选择是绑定到innerHtml。显然这可以让你打开所有类型的攻击,所以你需要解析/转义内容,并且你可以使用管道。

@Pipe({name: 'escapeHtml', pure: false}) 
class EscapeHtmlPipe implements PipeTransform { 
    transform(value: any, args: any[] = []) { 
     // Escape 'value' and return it 
    } 
} 

@Component({ 
    selector: 'hello', 
    template: `<div [innerHTML]="myHtmlString | escapeHtml"></div>`, 
    pipes : [EscapeHtmlPipe] 
}) 
export class Hello { 
    constructor() { 
    this.myHtmlString = "<b>This is some bold text</b>"; 
    } 
} 

这里有一个plnkr用天真的HTML转义/解析。

我希望它能帮助:)

+10

貌似语法是现在'[innerHTML的]':http://stackoverflow.com/a/34424375/86937 –

+4

这是不足以在您的innerHTML实际上包含角可使用代码的情况。在我的情况下,我想能够使用[routerLink],但我不能。 – thouliha

+0

@thouliha你有没有想过解决这个问题? – Tucker

26

简单的解决方案:

<div [innerHTML]="some_string"></div> 

哪里some_string可以是HTML代码,e.g:some_string = "<b>test</b>"

没有管道或任何需要的东西。通过角2.0

+0

如何在innerHTML内部有两个空格分隔的属性?像'prop1_value prop2_value'一样。没有创建任何方法来连接它们。 –

+0

尝试做一些像[innerHTML] =“{prop1_value +''+ prop2_value}” – Vingtoft

+2

它没有像这样工作。我添加了一个新的“span”,并在那里添加了prop值。 –

3

支持我得到了同样的问题,买我从后端请求解码HTML和他们,你可以注入HTML到您的网页

// YOUR TS 
 
@Component({ 
 
    selector: 'page', 
 
    templateUrl: 'page.html' 
 
}) 
 
export class Page { 
 
    inject:any; 
 
    constructor() { } 
 

 
    ionViewDidLoad() { 
 
    this.inject='your HTML code' 
 

 
    } 
 

 
}
// YOU HTML PAGE 
 

 
<div [innerHTML]="inject"></div>

-1

对于以下属性绑定使用: <div innerHtml="{{ property }}"></div>

只是一个字符串: <div [innerHtml]="<p>property</p>"></div>

+0

它不起作用 –