Поскольку это рекурсивное дерево произвольной глубины, самое простое
объявите объект для моделирования списка файлов, который вы, похоже, извлекаете, и укажите для этого объекта атрибут, который описывает, развернут ли он.
Что-то вроде класса, добавленного к вашему компоненту
public export File{
Name:string;
isExanded:boolean;
}
Тогда я бы изменил массив файлов на
files:File[]
Когда вы загружаете данные в подписку, вы можете либо обновить свой сервис для использования аналогичного объекта DTO и вернуть эту коллекцию, либо вы можете перебрать полученный список строк и создать экземпляры объекта File. В настоящее время вы должны инициализировать опцию isExanded в false (если вы не хотите сохранять состояние сервера состояний).
Я бы тогда реализовал обработчик событий в дереве, который обновил состояние текущего файла
toggleFileState(item:File){
item.isExpanded = !item.isExpanded;
}
Обновите событие щелчка, чтобы вызвать этот обработчик события и передать текущее значение элемента. Также обновите ваш [ngClass], чтобы он ссылался на свойство isExpanded в текущем экземпляре объекта элемента
[ngClass]="{'fa-angle-down':item.isExpanded, 'fa-angle-right':!item.isExpanded'}"