V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CyouYamato
V2EX  ›  前端开发

求助: 当使用 Angular 的 MatIcon 时,有概率不显示 icon 或者只显示部分的.

  •  
  •   CyouYamato · 4 天前 · 325 次点击
    新手学 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>
    5 条回复    2024-12-30 11:48:33 +08:00
    chihiro2014
        1
    chihiro2014  
       4 天前   ❤️ 1
    为啥整这么复杂?直接放在前端静态目录就完了=。=,然后注册到 maticonregistry 统一管理。不至于为了一点性能来折磨自己
    wunonglin
        2
    wunonglin  
       4 天前   ❤️ 1
    mat icon 有 npm 包,直接装了用就行了,区区 icon 用 indexdb 那不整复杂了,不是有 cdn 么
    CyouYamato
        4
    CyouYamato  
    OP
       4 天前
    @chihiro2014 准备部署在自己的小破服务器上, 想着能省一点带宽是一点, svg 这东西正好不需要频繁更新.
    chihiro2014
        5
    chihiro2014  
       3 天前   ❤️ 1
    @CyouYamato 上面说的对,用 CDN 也不走你的流量。。。真的别为难自己。。。而且这种代码也用不着写 await 和 rxjs
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 22:38 · PVG 06:38 · LAX 14:38 · JFK 17:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.