如何在 angular 组件内呈现 JSON 响应中的 angular material 标签?
How to render angular material tags from JSON response inside angular component?
我有一个 json 这样的回复
{
_id: '5dd0d0dc4db1cf9c77781aaa',
picture: 'http://placehold.it/32x32',
name: 'Graciela Mcmahon',
guid: '98c0fcc2-1dfc-4974-bdae-d8263d783e0a',
star:
'<mat-icon>star</mat-icon><mat-icon>star</mat-icon><mat-icon>star_half</mat-icon><mat-icon>star_border</mat-icon><mat-icon>star_border</mat-icon>',
}
当我渲染开始时它没有按预期渲染
我的组件代码
<owl-carousel-o [options]="listingSliderOptions" class="row">
<ng-container *ngFor="let listing of listingJson">
<ng-template carouselSlide [id]="listing._id">
<a [routerLink]="['/']" class="listing-grid-item">
<figure>
<img src="{{listing.picture}}" alt="" />
<div class="info">
<div class="cat_star" [innerHTML]="listing.star">
</div>
<h3>{{listing.name}}</h3>
</div>
</figure>
</a>
</ng-template>
</ng-container>
</owl-carousel-o>
以上代码显示为
这是正确的显示方式还是我必须在 Angular 组件内生成标签?
预期结果
问题
您的问题源于您试图在运行时动态加载组件这一事实。纯 html.
不会发生这种情况
阅读 this article here 动态组件加载。 mat-icon
不是 html 元素,所以浏览器不知道如何处理它,因此你会得到这个奇怪的结果。
在您的应用程序中加载 html 也是一种非常糟糕的安全做法,它来自 api 作为恶意代码并且 html 可能会被注入。
解决方案
从您的后端以数字形式发送星星。创建一个在其中定义了 mat-icon 的 ngFor,并根据需要迭代多次以创建星星。
<div class="cat_star">
<ng-container *ngFor="let star of listing.star">
<mat-icon>{{ star }}</mat-icon>
</ng-container>
</div>
我有一个 json 这样的回复
{
_id: '5dd0d0dc4db1cf9c77781aaa',
picture: 'http://placehold.it/32x32',
name: 'Graciela Mcmahon',
guid: '98c0fcc2-1dfc-4974-bdae-d8263d783e0a',
star:
'<mat-icon>star</mat-icon><mat-icon>star</mat-icon><mat-icon>star_half</mat-icon><mat-icon>star_border</mat-icon><mat-icon>star_border</mat-icon>',
}
当我渲染开始时它没有按预期渲染 我的组件代码
<owl-carousel-o [options]="listingSliderOptions" class="row">
<ng-container *ngFor="let listing of listingJson">
<ng-template carouselSlide [id]="listing._id">
<a [routerLink]="['/']" class="listing-grid-item">
<figure>
<img src="{{listing.picture}}" alt="" />
<div class="info">
<div class="cat_star" [innerHTML]="listing.star">
</div>
<h3>{{listing.name}}</h3>
</div>
</figure>
</a>
</ng-template>
</ng-container>
</owl-carousel-o>
以上代码显示为
这是正确的显示方式还是我必须在 Angular 组件内生成标签?
预期结果
问题
您的问题源于您试图在运行时动态加载组件这一事实。纯 html.
不会发生这种情况阅读 this article here 动态组件加载。 mat-icon
不是 html 元素,所以浏览器不知道如何处理它,因此你会得到这个奇怪的结果。
在您的应用程序中加载 html 也是一种非常糟糕的安全做法,它来自 api 作为恶意代码并且 html 可能会被注入。
解决方案
从您的后端以数字形式发送星星。创建一个在其中定义了 mat-icon 的 ngFor,并根据需要迭代多次以创建星星。
<div class="cat_star">
<ng-container *ngFor="let star of listing.star">
<mat-icon>{{ star }}</mat-icon>
</ng-container>
</div>