简体   繁体   English

如何使用innerHTML渲染角度变量-Angular2

[英]How to render angular variables using innerHTML - Angular2

In my application their is some text which is coming from a constant file which is declared like this: 在我的应用程序中,它们是一些来自常量文件的文本,该文件声明如下:

  export const EmpStrings = {
    data:  "Welcome {{employee.name}}"
  }

And In my component file there is an object called employee . 在我的组件文件中,有一个名为employee的对象。

   public employee = { name: 'xyz', dept: 'EE' }

Now In my HTML I want to use it like this: 现在在我的HTML中,我想像这样使用它:

<div class='e-data' [innerHTML] = "EmpStrings.data"></div>

But this didn't seems to be working. 但这似乎没有用。 I tried various variations: 我尝试了各种变体:

[inner-html] = "EmpStrings.data"
[innerHTML] = {{EmpStrings.data}}
[innerHTML] = "{{EmpStrings.data}}"

But none of them seems to be working. 但是它们似乎都没有起作用。

使用${employee.name}将角度变量绑定到innerHTML

"data": `Welcome ${employee.name}`

If you don't want to use JitCompiler then you can parse string yourself 如果您不想使用JitCompiler,则可以自己解析字符串

component.ts component.ts

ngOnInit() {
  this.html = EmpStrings.data.replace(/{{([^}}]+)?}}/g, ($1, $2) => 
      $2.split('.').reduce((p, c) => p ? p[c] : '', this));
}

template 模板

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

Plunker Example 柱塞示例

Angular doesn't interpolate strings like this, as far as I know one of the reason is security. 据我所知,Angular不会插值这样的字符串,原因之一就是安全性。 The const doesn't have the context where your employee is in hence you see the error saying employee is not defined. const没有您的雇员所在的上下文,因此您会看到错误消息,指出未定义雇员。

You could do this: 您可以这样做:

Change your constant: 更改常量:

export const EmpStrings = {data:  "Welcome "};

then: 然后:

<div class='e-data'>{{EmpStrings.data}}{{employee.name}}</div>

But if for some reason you must use [innerHTML] : 但是,如果由于某些原因必须使用[innerHTML]

  1. In your component class, add a method: 在您的组件类中,添加一个方法:

    getWelcomeMessage(){return EmpStrings.data + this.employee.name;}

  2. in the component view: 在组件视图中:

    <div class='e-data' [innerHTML] = "getWelcomeMessage()"></div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM