带有变量 angular2 的 innerHTML

Posted

技术标签:

【中文标题】带有变量 angular2 的 innerHTML【英文标题】:innerHTML with variables angular2 【发布时间】:2017-07-04 10:18:25 【问题描述】:

我想知道如何将变量放入字符串中并使用 Angular2 进行渲染?

这是我的代码:

html

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

变量:

public testHTML: string = "<h1>test -  variable[0] </h1>";

“变量”是一个字符串数组,不为空且至少包含一个值。

我得到的是:

测试 - 变量[0]

H1 ​​渲染得很好。但我的变量没有被解释!

我该如何解决这个问题?

【问题讨论】:

你为什么不像"&lt;h1&gt;test - "+variable[0]+"&lt;/h1&gt;";那样创建testHTML 因为这个字符串来自服务器上的设置.. 如果您有上述问题的答案,请告诉我@carndacier。我需要它。这是一个服务器响应 HTML 文件。该文件显示变量值。 【参考方案1】:

不能在 HTML 中动态添加任何 Angular 特定内容。它们都只有在静态添加到组件模板时才有效。

您可以在运行时动态创建组件并使用ViewContainerRef.createComponent() 添加这样的组件

另见Equivalent of $compile in Angular 2

【讨论】:

【参考方案2】:

你可以试试下面的方法,

 variable=["Angular2","Angular1"];

 constructor()
   this.testHTML = `<h1>test - $this.variable[0]</h1>`; 
 

演示:https://plnkr.co/edit/sGTcVAym6jKjm8i7jQgb?p=preview

【讨论】:

就像注意一样,这需要this.testHTML =

test - $this.variable[0]

; 每次variable[0] 更改时都要执行。跨度>
是的。然后 n 然后你可以得到更新的值。它应该在 TS 级别进行解析。【参考方案3】:

我在 Angular 7 中测试了我的解决方案。

为了从服务器动态加载信息,我做了以下操作:

this.subscription = this.service.getDynamicHtml()
      .subscribe(innerHTML =>
        this.innerHTML = <string>innerHTML;
      );

在我简单使用的模板中

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

在我的情况下,服务器返回所有文本,但在你的情况下,如果在订阅结束时只需要更新一个变量,屏幕将被刷新。

详情请见https://alligator.io/angular/innerhtml-binding-angular/

【讨论】:

【参考方案4】:

好的,所以我的要求是让这个字符串值成为一个 API,等等,我不知道它会是什么......我已经放置了一个简单的解析器,我会在新的时候更新需求进来了。

对于那些可能感兴趣的人,这里是以下 html 的功能:var test = "&lt;h1&gt;test - Contact.FirstName&lt;/h1&gt;";:

  public retrieveValue(from: string) 

    var tmp = from.split("");
    for (var i = 0; i < tmp.length; i++) 

      var val = tmp[i].split("")[0];

      var toReplace = "" + val + "";

      var tmp1 = val.split(".");

      var final: any | string = this;
      for (var j = 0; j < tmp1.length; j++)
        final = final[tmp1[j]];

      var re = new RegExp(toReplace,"g");
      from = from.replace(re, final);
    

    return from;
  

这个函数(还)不适用于数组,但我认为它可以很容易地扩展。

如果这个答案至少有 10 个“有用”投票,我会将其标记为答案。否则 Günter Zöchbauer 的答案将是一个:)

感谢你们的帮助。

【讨论】:

以上是关于带有变量 angular2 的 innerHTML的主要内容,如果未能解决你的问题,请参考以下文章

将模板添加为 innerHTML 时,Angular 2 绑定/事件不起作用

Angular2 [innerHtml] angular2 标签不起作用

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

Angular2 innerHtml 删除样式

带有 InnerHtml 的 Javascript 变量不起作用

Angular2 innerHtml绑定删除样式属性[重复]