【问题标题】:camelCase to lowercase html attribute conversion in Angular innerHtml bindingAngular innerHtml绑定中的camelCase到小写html属性转换
【发布时间】:2020-03-18 09:52:42
【问题描述】:

在我的组件中,我有一个模板文字字符串,其中包含一个带有 camelCase 属性的 HTML 标记:

htmlString = `<mat-icon svgIcon="edit" ...></mat-icon>`;

这个字符串被组合为数组 forEach 循环中对象的属性。

由于模板中的几个原因,我需要在 *ngFor 循环内的 innerHtml 属性中输出:

<li *ngFor="let foo of foos" [innerHTML]="foo.htmlString"></li>

(这是我的实现的简化代码示例。)

我发现在输出中svgIcon 属性以小写svgicon 呈现,请参阅DOM 检查器输出:

<li _ngcontent-qui-c96="">
  <mat-icon svgicon="edit"></mat-icon>
</li>

错误或功能?找不到有关此行为的任何信息。感谢您的任何提示!

【问题讨论】:

  • 你知道这无论如何都行不通吧?
  • 我已经更新了描述。它有效,innerHtml 内容被正确放入 DOM。

标签: angular angular2-template string-interpolation template-literals property-binding


【解决方案1】:

属性确实都是被Angular转换成小写的,不用担心。

此外,您作为副作用提出的观点很有趣,可能需要一些解释:您将 innerHtml 与 Angular 组件一起使用(mat-icon,它不是标准的 HTML 标记)。

所以,无论如何,它都会失败:网络浏览器不知道如何呈现mat-icon

对于要呈现的mat-icon,它必须通过 Angular 模板引擎:Angular 将看到 mat-icon,并将提取组件定义/模板,并以 HTML 术语 (DOM) 呈现它,即浏览器可以理解。

通常在您的情况下,您应该使用:

<li *ngFor="let foo of foos">
  <mat-icon [svgIcon]="foo.icon" ...></mat-icon>
</li>

如果您的组件更复杂,您可以通过ng-content 探索使用内容投影。

【讨论】:

  • 感谢他的解释!同时我发现由于降低了复杂性,我不需要做这个字符串插值的东西,只需在模板中用文字做通常的方式:)
猜你喜欢
  • 2021-11-08
  • 2017-09-20
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多