Цвет звезды рейтинга Ng Bootstrap на основе выбранного количества

Я применяю звездный рейтинг с помощью пользовательского шаблона рейтинга. Я хочу изменить цвет выбранных звезд на основе выбранного в данный момент количества. Например, 4 выбранные звезды = зеленый, 3 выбранные звезды = оранжевый, ...

Я видел в документации ng-bootstrap, что интерфейс StarTemplateContext имеет два свойства fill и index. Основываясь на этих свойствах, я смог изменить цвет по определенному индексу. Например, первая звезда зеленая, вторая звезда оранжевая.

 <ngb-rating [starTemplate] = "t" [rate]=data.stars></ngb-rating>
<ng-template #t let-fill = "fill" let-index = "index">
  <span class = "star" [class.full] = "fill === 100" [class.green] = "index === 4" [class.orange] = "index === 3">
    <i class = "fas fa-square square-star"></i>
  </span>
</ng-template>

Но теперь я хочу, чтобы все выбранные звезды были одного цвета. Есть идеи, как это реализовать?

просто поместите .filled css на последнее место и удалите все .filled.class, см. stackblitz.com/edit/angular-hfevz9?file=app/rating-template.‌​ts

Eliseo 10.04.2019 10:43

Я думаю, вы неправильно поняли мой вопрос. Смотрите мое решение ниже.

zperee 12.04.2019 08:14

::glups:: Я действительно неправильно понял ваш вопрос, извините

Eliseo 12.04.2019 08:38
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
3
2 986
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хитрость заключалась в том, чтобы добавить ng-template в тег ngb-rating, где известно значение ставки.

<div *ngFor = "let rating of data">
<ngb-rating [rate] = "rating" [max]=4>
  <ng-template let-fill = "fill">
    <span class = "star color{{rating}}" [class.filled] = "fill === 100">&#9733;</span>
  </ng-template>
</ngb-rating>
</div>

См. работающее решение здесь https://stackblitz.com/edit/angular-hfevz9-jpxukv

Другие вопросы по теме