新手学 Angular 人麻了. 附上代码
AComponent ts:
this.iconsLoaded$.subscribe((data: boolean) => {
this.iconsLoaded = data;
this.cdr.detectChanges();
});
async registerIcons() {
for (const item of this.gridColumns) {
// 从 IndexedDB 中取出 svg
const svg: string | undefined = await getSvg(item);
if (!svg) {
const svgContent = await fetch(`icon/${item}.svg`).then((res) =>
res.text(),
);
await setSvg(item, svgContent); // 缓存到 IndexedDB
this.matIconRegistry.addSvgIconLiteral(
item,
this.sanitizer.bypassSecurityTrustHtml(svgContent),
);
} else {
this.matIconRegistry.addSvgIconLiteral(
item,
this.sanitizer.bypassSecurityTrustHtml(svg),
);
}
}
return true;
}
BComponent ts:
await this.AComponent.registerIcons();
this.AComponent.iconSubject.next(true);
A html:
<ng-container class="grid-container">
<mat-grid-list cols="2" rowHeight="3:1">
@
if (iconsLoaded$ | async) {
@
for (item of gridColumns; track item) {
<mat-grid-tile class="grid-item">
<div class="content-container">
<mat-icon [svgIcon]="item"></mat-icon>
<span>
{{ cityInfo[item] }}
</span>
</div>
</mat-grid-tile>
}
}
</mat-grid-list>
</ng-container>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/1101082
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.