Как изменить цвет только одной кнопки?

У меня проблема. Я сделал цикл с кнопками в HTML. Итак, теперь я хочу, чтобы они меняли цвет, когда я нажимаю кнопку. Но у меня проблема в том, что все они меняют цвет. Но я хочу изменить только цвет нажатой кнопки.

HTML

 <ion-item *ngFor = "let friend of friendsList">
      <ion-avatar item-start>
        <img src = {{friend.img}}>
      </ion-avatar>
      <button ion-button color = "rank" class = "avat"> </button>
      <h2>{{friend.name}}</h2>
      <p>{{friend.status}}</p>
      <button (click) = "toggleNamedColor()" ion-button round color = "rank" [color] = "ionicNamedColor" item-end>+Add</button>

    </ion-item>

  </ion-list> 

TS

public ionicNamedColor: string = 'rank';

public toggleNamedColor(): void {
      if (this.ionicNamedColor === 'rank') { 
        this.ionicNamedColor = 'primary'
      } else {
        this.ionicNamedColor = 'rank'
      }
    }

Не могли бы вы также добавить код своего цикла? В любом случае вы могли бы в основном перебирать каждую кнопку внутри вашего цикла и изменять их цвета напрямую, а не использовать переменные.

Aer0 05.04.2018 10:40

Можете ли вы использовать его как <ion-item *ngFor = "let friend of friendsList"> <button (click) = "toggleNamedColor(friend)" ion-button round color = "rank" [color] = "friend.ionicNamedColor" item-end>+Add</button> </ion-item>, а затем в ts изменить friend.ionicNamedColor

XYZ 05.04.2018 10:43

@XYZ, не могли бы вы помочь мне с разделом TS? Я точно не знаю, что изменить на friend.ionicNamedColor. Потому что, когда я меняю this.ionicNamedColor, появляется ошибка (друг перед точкой) подчеркивается красным

Colin Ragnarök 05.04.2018 10:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
3
232
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пожалуйста, попробуйте с индексом в ngFor

HTML

<ion-item *ngFor = "let friend of friendsList;let i = index">
      <ion-avatar item-start>
        <img src = {{friend.img}}>
      </ion-avatar>
      <button ion-button color = "rank" class = "avat"> </button>
      <h2>{{friend.name}}</h2>
      <p>{{friend.status}}</p>
      <button (click) = "curIndex = i" ion-button round [color] = "curIndex == i ? 'rank' : 'primary'" item-end>+Add</button>

    </ion-item>

объявить эту переменную в файле .ts

curIndex:number = null;

Обратитесь к stackblitz демонстрация

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

Вы можете попробовать это, как в этом примере, добавив свойство цвета к объекту и изменив свойство цвета этого объекта при нажатии

 <ion-list> 
    <ion-item *ngFor = "let friend of friendsList">
          <ion-avatar item-start>
            <img src = {{friend.img}}>
          </ion-avatar>
          <button ion-button color = "rank" class = "avat"> </button>
          <h2>{{friend.name}}</h2>
          <p>{{friend.status}}</p>
          <button (click) = "toggleNamedColor(friend)" ion-button round color = "rank" [color] = "friend.ionicNamedColor" item-end>+Add</button>

        </ion-item>

      </ion-list>

И в ц

public toggleNamedColor(friend): void {
      if (friend.ionicNamedColor === 'rank') { 
        friend.ionicNamedColor = 'primary'
      } else {
        friend.ionicNamedColor = 'rank'
      }
  }

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