tltr:我可以从angular访问资产目录吗?
我在src/assets/icons
中使用的文件夹mat-icon
中有一堆SVG。唯一的缺点是,当我添加一个新图标时,我必须添加文件,并且必须将文件名添加到一个数组中,该数组用来循环将其添加到matIconRegistry
中。有没有一种方法可以简单地从目录中读取所有文件?
这是我当前的解决方案:
@NgModule()
export class CustomIconModule {
constructor(
private matIconRegistry: MatIconRegistry,
private domSanitizer: DomSanitizer
) {
const icons = [
'icon1', 'icon2',
];
for (const icon of icons) {
this.matIconRegistry.addSvgIconInNamespace(
'my-namespace',
icon,
domSanitizer.bypassSecurityTrustResourceUrl(`./assets/icons/${icon}.svg`)
);
}
}
}
更新:我编写了一个bash脚本,该脚本循环遍历该文件,生成一个包含所有文件名数组的.ts文件,并执行git add
。我在预提交的git钩子中运行它。并不理想,但目前还可以。不过,我很想找到一个纯JS解决方案。
答案 0 :(得分:1)
因为从assets
文件夹访问文件很容易,所以我们可以利用它
,并且可以在图标icons.json
中存储图标文件名称的数组。
1。在icons.json
文件夹中创建assets
,如下所示-
{ // ---------- icons.json---------
"icons-array" : ["icon-name1", "icon-name2", "icon-name3"]
}
2。。将icon-name1.svg
,icon-name2.svg
,icon-name3.svg
文件保存在assets/icons
文件夹中。
3。。在角度应用程序启动时读取icons-json
文件。
How to read file at Angular Application Start-up
4。。在读取icons.json
内容之后,将icons-array
属性的值存储到全局可访问数组中,例如globalAccessibleIconsArray
。
5。并将数组用作-
for (const icon of globalAccessibleIconsArray) {
this.matIconRegistry.addSvgIconInNamespace(
'my-namespace',
icon,
domSanitizer.bypassSecurityTrustResourceUrl(`./assets/icons/${icon}.svg`)
);
}
因此,用于添加新图标
assets/icon
文件夹中,然后icons.json
文件夹中的assets
文件中添加新文件名。