Получил объект Word (для приложения для тренировки словарного запаса), который содержит количество правильных и неправильных ответов. Попытка отобразить индикатор выполнения, в котором будет информация об этих ответах.
<div class = "progress">
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar" [style.width] = "word.correctAnswers" [attr.aria-valuenow] = "word.correctAnswers" aria-valuemin = "0" [attr.aria-valuemax] = "totalAnswers"></div>
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-danger" role = "progressbar" style = "width: 20%" attr.aria-valuenow = "{{word.wrongAnswers}}" aria-valuemin = "0" attr.aria-valuemax = "{{totalAnswers}}"></div>
</div>
ТС:
@Input()
word!: Word;
totalAnswers!: number;
ngOnInit(): void {
this.totalAnswers = this.word.correctAnswers + this.word.wrongAnswers;
}
Пока не повезло. Пробовал разные способы в соответствии с информацией, которую я нашел, как вы можете видеть выше. На данный момент зеленая полоса вообще не отображается, а красная полоса остается на фиксированных 20 процентах. Когда я пытаюсь изменить его style.width, он тоже исчезает.
Рассчитайте процент (желательно создать отдельную переменную в компоненте), а затем установите ее как ширину с помощью обозначения [style.width.%]
.
Попробуй это:
<div class = "progress">
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar" [style.width.%] = "(100 * word.correctAnswers)/totalAnswers" [attr.aria-valuenow] = "word.correctAnswers" aria-valuemin = "0" [attr.aria-valuemax] = "totalAnswers"></div>
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-danger" role = "progressbar" [style.width.%] = "(100 * word.wrongAnswers)/totalAnswers" attr.aria-valuenow = "{{word.wrongAnswers}}" aria-valuemin = "0" attr.aria-valuemax = "{{totalAnswers}}"></div>
</div>
или с переменными в компоненте:
totalAnswers!: number;
correctPercentage!: number;
wrongPercentage!: number;
ngOnInit(): void {
this.totalAnswers = this.word.correctAnswers + this.word.wrongAnswers;
this.correctPercentage = (100 * this.word.correctAnswers)/this.totalAnswers;
this.wrongPercentage = (100 * this.word.wrongAnswers)/this.totalAnswers;
}
<!-->
<div class = "progress">
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar" [style.width.%] = "correctPercentage" [attr.aria-valuenow] = "word.correctAnswers" aria-valuemin = "0" [attr.aria-valuemax] = "totalAnswers"></div>
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-danger" role = "progressbar" [style.width.%] = "wrongPercentage" attr.aria-valuenow = "{{word.wrongAnswers}}" aria-valuemin = "0" attr.aria-valuemax = "{{totalAnswers}}"></div>
</div>
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar" [style.width] = "word.correctAnswers" [attr.aria-valuenow] = "word.correctAnswers" aria-valuemin = "0" [attr.aria-valuemax] = "totalAnswers"></div>
Зеленая полоса не отображается в приведенном выше коде, потому что word.correctAnswers, который использовался для привязки к style.width, не имеет строкового значения со знаком процента, например 2% или 25%. Я так понимаю, там только номер. Так что вы можете сделать ниже, чтобы добавить знак %
.
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar"
[style.width] = "word.correctAnswers + '%'" [attr.aria-valuenow] = "word.correctAnswers" aria-valuemin = "0"
[attr.aria-valuemax] = "totalAnswers"></div>
или привяжите его, используя [style.width.%]
<div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar"
[style.width.%] = "word.correctAnswers" [attr.aria-valuenow] = "word.correctAnswers" aria-valuemin = "0"
[attr.aria-valuemax] = "totalAnswers"></div>
Теперь будет отображаться зеленая полоса в зависимости от предоставленной ширины.
О боже, это должно было быть в процентах. Большое спасибо.