如何使用innerHTML在angular 2中附加HTML内容

Posted

技术标签:

【中文标题】如何使用innerHTML在angular 2中附加HTML内容【英文标题】:how to append HTML content in angular 2 using innerHTML 【发布时间】:2017-08-24 06:18:13 【问题描述】:

我使用 innerhtml 在我的组件中呈现 HTML 内容。但是 innerHTML 会移除 HTML 内容中的所有属性(例如:移除样式属性)并呈现它。但是需要按原样渲染,并且不想从 HTML 内容中提取任何属性。是否有任何等价于innerHTML 或者我们可以使用innerHTML 完成所需的结果。提前致谢。

我的模板文件

<div id="more-info-box" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Title</h4>
            </div>
            <div class="modal-body">
                <div class="clearfix">
                    <div [innerHTML]="htmlContent" class="long-desc-wrap">
                    </div>
                </div>
            </div>
         </div>
    </div>
</div><!-- End Info box -->

我的组件文件

import  Component  from '@angular/core';


@Component(
  selector: 'cr-template-content',
  templateUrl: './app/channel.component.html'
)
export class TemplateComponent 
  constructor() 

  

  htmlContent = '<p>This is my <strong style="color:red">Paragraph</strong></p>'


我当前的输出是没有样式属性的内容。 但是想要的结果应该是 style 属性。

【问题讨论】:

“并将其附加到我的组件中”是什么意思?从来没有听说过这样的事情。请出示您的代码。见***.com/questions/31548311/angular-2-html-binding/… 请发布您迄今为止尝试过的代码。 听起来您需要使用 DomSanitazer,但就像 @Günter Zöchbauer 所说的那样 - 如果您粘贴一些您的代码或 plunker 会更容易提供帮助...... 嘿@Manush 这对我来说很好用.. 【参考方案1】:

你可以直接在你的组件 html 中注入。

Plunker 链接:

https://plnkr.co/edit/lWR6q8?p=preview

@Component(
  selector: 'my-app',
  template: `
    <div>
      <h2 [innerHTML]="htmlContent"></h2>
    </div>
  `,
)
export class App 
  htmlContent:string;
  constructor() 
    this.htmlContent = `<p>This is my html coontent</p>`
  

【讨论】:

【参考方案2】:

使用 ViewChild。

import ViewChild,ElementRef,Component from '@angular/core'

在模板中创建一个局部变量

<div #div ></div>

查询组件类内部的局部变量

@Component(...) class MyComponent 
@ViewChild('div') div:ElementRef;

访问任何函数内的原生元素

this.div.nativeElement.innerHTML ="something";

就是这样。 ☺

【讨论】:

这对我来说很好。但是如果我必须在同一个组件中再次做同样的事情怎么办?我不允许使用多个 viewchild 对吗?所以对于第二次使用,我需要使用一些其他的方式来附加 html 组件。我现在被困在这一点上......【参考方案3】:
 import  DomSanitizer from '@angular/platform-browser';
 .... 
 htmlContent:any;
    constructor(private sanitizer: DomSanitizer)
      this.htmlContent = this.sanitizer.bypassSecurityTrustHtml('<p>This is my <strong style="color:red">Paragraph</strong></p>');

或者你可以使用https://***.com/a/41089093/217408中所示的管道

【讨论】:

如何将 file2.component.html 嵌入到 file1.component.html 中? 对不起,我不明白这个问题。我建议您创建一个包含更多详细信息的新文件。 对不起。我将尝试在这里解释,在上面的答案中,我们附加了一些段落

。但就我而言,该段落

存在于其他一些html文件中。我想将 file2.html 内容附加到 file1.html 中。我该怎么做?任何建议

这个问题不是关于添加文件,而是关于添加 HTML 字符串。您可以使用 iframe 来显示 HTML 文件。【参考方案4】:

我认为添加 html 的最佳方法是创建一个指令:

test.directive.ts:

import  Directive,ElementRef  from '@angular/core';
import  DomSanitizer  from '@angular/platform-browser';

@Directive(
    selector: '[add-html]'
)

export class TestDirectives
    constructor(el:ElementRef,private sanitizer:DomSanitizer,private elementRef:ElementRef)
            this.elementRef.nativeElement.innerHTML ='<h1>Hello World</h1>';
    

现在您的指令已创建,您可以将此指令添加到您的app.module.ts 中,如下所示:

app.module.ts:

import  NgModule  from '@angular/core';
import  AppComponent  from './app.component';
import  TestDirectives  from '../directives/test.directive';


@NgModule(
  declarations: [
    AppComponent,
    TestDirectives
  ],
  imports: [],
  providers: [],
  bootstrap: [AppComponent]
)
export class AppModule  

你必须在你的 html 中使用你的指令,你想在其中添加这个 html,如下面的代码:

<div add-html></div>

现在查看输出。

【讨论】:

【参考方案5】:

在component.ts文件中创建一个变量

text:string;
ngOnInit()
   this.text= "<p>This is new paragraph</p>"

然后在 component.html 文件中添加如下所示的 innerHTML 属性:

&lt;div [innerHTML]="text"&gt;&lt;/div&gt;

它会将文本值附加到 div 中

<div><p>this is new paragraph</p></div>

希望它能解决你的问题:)

【讨论】:

以上是关于如何使用innerHTML在angular 2中附加HTML内容的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Angular 2+ innerHTML 在单个语句中多次调用方法,如何解决这个问题

Angular 2:我如何将指令应用于净化的 html/innerhtml

angular 2 [innerHTML] 在 html 内渲染(不适用于 angular 2)[重复]

使用 Angular 2+ [innerHTML] 添加包含样式属性的 html

我应该使用 [innerHTML] 还是通常的方式(Angular 2)

如何在不在 Angular 中添加标签的情况下呈现 innerHTML