Все ваши CSS могут быть обработаны с помощью ngClass
.ngClass позволяет вам применять стили к элементу на основе условий, поэтому вы можете сделать что-то вроде следующего для вашего индикатора выполнения:
<div class="progress-bar progress-easy"
role="progressbar"
aria-valuenow="60"
aria-valuemin="0"
aria-valuemax="100"
[style.width]="verifyDifficulty(text1)*10+'%'"
[ngClass]="{
'progress-easy' : verifyDifficulty(text1)<=3,
'progress-medium' : verifyDifficulty(text1)>3 && verifyDifficulty(text1)<=6,
'progress-hard' : verifyDifficulty(text1)>6 && verifyDifficulty(text1)<=9,
'progress-very-hard' : verifyDifficulty(text1)==10
}">
{{verifyDifficulty(text1)*10}}
</div>
Хотя, чтобы сохранить ваш шаблон чистым, я мог бы применить [ngClass]
сфункция, а не сырые условия в вашем шаблоне.Например,
<div class="progress-bar progress-easy"
role="progressbar"
aria-valuenow="60"
aria-valuemin="0"
aria-valuemax="100"
[style.width]="verifyDifficulty(text1)*10+'%'"
[ngClass]="getStyleClass(text1)">
{{verifyDifficulty(text1)*10}}
</div>
Где getStyleClass(text1)
- это функция в вашем компоненте, которая возвращает класс на основе входных данных.
Теперь, для вашей проблемы aria
, сначала примените атрибут вAngular, вы используете привязку attr
, как уже упоминалось, поэтому в вашем случае:
[attr.aria-valuenow]="whatever"
Альтернативой, а возможно и лучше, в зависимости от вашей школы мысли, является использование Renderer2
для примененияАрия динамически, как таковая, вам нужно внедрить ее в ваш компонент, и сделать ваш индикатор выполнения ViewChild
.
@ViewChild('progressBar') progressBar: ElementRef;
constructor(private renderer2: Renderer2) { }
Теперь ваш шаблон становится:
<div #progressBar class="progress-bar progress-easy"
role="progressbar"
aria-valuenow="60"
aria-valuemin="0"
aria-valuemax="100"
[style.width]="verifyDifficulty(text1)*10+'%'"
[ngClass]="getStyleClass(text1)">
{{verifyDifficulty(text1)*10}}
</div>
Примечаниедобавления #progressBar
- это помечает элемент как viewchild, по этой ссылке.
Теперь, когда вам нужно изменить значение арии, вы можете сделать это динамически с помощью:
this.renderer2.setAttribute(this.progressBar.nativeElement, 'aria-valuenow', 'whatever value');
Работа хороша!??