У меня проблема. Я сделал цикл с кнопками в 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'
}
}
Можете ли вы использовать его как <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, не могли бы вы помочь мне с разделом TS? Я точно не знаю, что изменить на friend.ionicNamedColor. Потому что, когда я меняю this.ionicNamedColor, появляется ошибка (друг перед точкой) подчеркивается красным



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Пожалуйста, попробуйте с индексом в 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'
}
}
Не могли бы вы также добавить код своего цикла? В любом случае вы могли бы в основном перебирать каждую кнопку внутри вашего цикла и изменять их цвета напрямую, а не использовать переменные.