angular - 如何在Angular的html模板中声明和分配变量
问题描述
我知道这个问题已经在 Stackoverflow 上提出过,但建议的解决方案不起作用。
我需要循环进入一个包含类别和项目的列表。我只想显示一次类别,所以我需要测试类别是否与前一个相同。如果相同,我不显示它,但如果不是,我显示新类别。因此我想声明一个变量来存储当前的类别名称。
可能吗?如果不是,我该如何测试以前的类别和新的类别?
谢谢
编辑:我获取数据的方法:
getMenuByTruck = () =>{
const id: string = this.activeRoute.snapshot.params['id'];
const apiMenu: string = environment.apiAddress + 'TruckMenu/' + id;
this.repository.getData(apiMenu)
.pipe(finalize(() => {
this.updateTruckName();
}))
.subscribe(response => {
this.menu = response as Menu[];
},
(error) =>{
this.errorHandler.handleError(error);
this.errorMessage = this.errorHandler.errorMessage;
})
}
我的循环进入 html 代码:
<div class="title" *ngFor="let m of menu">
<h3>{{m.foodCategory?.description}}</h3>
</div>
解决方案
您可以创建一个新的对象类型变量,该变量将来自原始数据的项目以唯一类别作为键。
假设我们有原始数据
originalData = [
{ category: 1, item: 'Jan' },
{ category: 2, item: 'Sarah' },
{ category: 1, item: 'Tom' },
{ category: 2, item: 'Nina' },
];
我们将声明一个新的空对象变量。使用reduce on,我们将检查by 键中originalData
是否已经有一个条目作为名称。如果它在那里,我们将复制所有以前的项目(值),向其中添加一个新项目,否则我们将作为数组传递。acc
category
currentObj
itemsByCategory = {};
this.itemsByCategory = this.originalData.reduce((acc, currentObj) => {
acc[currentObj.category] = acc[currentObj.category]
? [...acc[currentObj.category], currentObj]
: [currentObj];
return acc;
}, {});
迭代的吸气剂itemsByCategory
get categoryKeys(): string[] {
return Object.keys(this.itemsByCategory);
}
在模板中
<ul *ngFor="let key of categoryKeys">
<li>
Category : {{ key }}
<p *ngFor="let obj of itemsByCategory[key]">
{{ obj.item }}
</p>
</li>
</ul>
如果您的菜单将类别作为对象,请查看此
推荐阅读
- angular - Material Angular 进度条不更新值(带有 observables )
- android-jetpack-compose - 如何在 Jetpack compose 中制作卡片渐变?
- .htaccess - .htaccess 将流量从新域重定向到另一个文件夹
- android - Android:一加 6T 指南针被“卡住”,直到放置在磁性支架上并被移除
- html - 如何在活动的 Bootstrap 4 下拉菜单中旋转箭头图标?
- mysql - Docker / MySQL - 学说迁移 - 访问容器外的数据库
- java - 试图将文本文件输入到二维字符数组中,但是我收到错误“java.lang.NumberFormatException:对于输入字符串”?
- azure-functions - 在 Azure Function (javascript) 中安装依赖包之前如何指定注册表?
- tensorflow - 是否可以微调 tensorflow 1 模型?
- r - 函数名称作为 R 中的循环变量