angular - Angular innerHtml 绑定(bind)中的 camelCase 到小写 html 属性转换

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

在我的组件中,我有一个模板文字字符串,其中包含一个带有驼峰式属性的 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>

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

最佳答案

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 的内容投影。

关于angular - Angular innerHtml 绑定(bind)中的 camelCase 到小写 html 属性转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60737019/

相关文章:

javascript - 节点模块 "angular2-multiselect-dropdown "模块的元数据版本不匹配错误

angular - 在 Angular 2 中根据用户操作动态切换 html 模板

Angular2 路由器链接不工作

c# - string interpolation 和 string.format 哪个性能更好?

scala - Scala 中的字符串插值?

javascript - 通过输入将数据获取到组件

javascript - 使用 ng2-file-upload 进行 Angular2+ 文件上传 - 子组件不断调用父组件函数

html - 页面上三列带有图像的方形卡片 - angular2,bootstrap

perl - 如何将 @ARGV 的元素分配给 $variable,然后打印它?

angular - 如何通过 Angular 行为主题传递多个(2个或多个)变量