Таким образом, я получил ответ без необходимости использовать функцию, чтобы получить ваш стиль в HTML, но при этом не иметь предопределенных ролей.
Вы можете добавить свойство color для ваших участников, которое будет основано на роли участника.Предполагая, что вы знаете элементы и цвета до создания компонента, вы можете установить это в ngOnInit()
следующим образом:
ngOnInit() {
this.assignColorsToMembers();
}
assignColorsToMembers() {
const uniqueRoles = this.getUniqueRoles();
const rolesWithColors = this.assignColorsToRoles(uniqueRoles);
this.members.forEach(member => {
member.color = rolesWithColors[member.role];
});
}
getUniqueRoles(): string[] {
const allRoles = this.members.map(member => member.role);
const uniqueRoles = Array.from(new Set(allRoles));
return uniqueRoles;
}
assignColorsToRoles(roles: string[]): RolesWithColors {
const rolesWithColors = {};
roles.forEach((role, index) => {
rolesWithColors[role] = this.colors[index];
});
return rolesWithColors;
}
Интерфейсы:
interface RolesWithColors {
[key: string]: string;
}
interface Member {
name: string;
role: string;
color?: string;
}
В getUniqueRoles () вы делаетемассив, который получает роли от всех ваших участников, а затем удаляет дубликаты.в методе assignColorsToRoles () вы создаете объект, в котором ключи (свойства) - это роли из массива, созданного вами в getUniqueRoles (), а значения - это цвета из вашего массива цветов.
Предполагается, что у вас есть массив сцвета, подобные этому: colors = ['red', 'yellow', 'blue', 'green', 'purple'];
и длина массива цветов достаточна, чтобы дать каждой роли свой цвет.
Если ваш массив цветов недостаточно длинный, вы можете проверить это в функции:
assignColorsToRoles(roles: string[]): RolesWithColors {
const rolesWithColors = {};
roles.forEach((role, index) => {
if (this.colors.length < index + 1) {
rolesWithColors[role] = 'white';
}
rolesWithColors[role] = this.colors[index];
});
return rolesWithColors;
}
Конечно, вы можете заменить белый на любые другие цвета, которые вы хотите.
Если у вас уже есть цвета, связанные с определенными ролями, это будет намного проще.Вы можете пропустить первые два шага assignColorsToMembers и изменить остальные в зависимости от того, как сохраняются ваши роли и цвета (массив или объект).
Теперь, когда всем членам назначен цвет, вы можете использовать это свойствов вашем html:
<div *ngFor="let member of members" [style.background-color]="member.color">
{{member.name}}
</div>