Angular: читать все файлы из папки активов - PullRequest
0 голосов
/ 27 января 2019

tltr: могу ли я получить доступ к каталогу ресурсов из angular?

У меня есть набор SVG в папке src/assets/icons, которую я использую с mat-icon.Единственный недостаток - когда я добавляю новую иконку, мне нужно добавить файл, и мне нужно добавить имя файла в массив, который я использую для циклического добавления для добавления его к 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, который перебирает файл, генерирует a.TS файл с массивом всех имен файлов и делает git add.Я запускаю его в git-хуке pre-commitне идеально, но это пока работает.Я хотел бы найти чистое решение JS, хотя.

1 Ответ

0 голосов
/ 29 января 2019

Поскольку доступ к файлу из папки 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 при запуске углового приложения.
Как читать файл при запуске приложения Angular

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.
...