Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Angular 6 клик по иконкам (https://javascript.ru/forum/angular/74343-angular-6-klik-po-ikonkam.html)

AlexTrust 03.07.2018 12:51

Angular 6 клик по иконкам
 
Добрый день. Подскажите, пожалуйста:
проект на ангулар - материал
<mat-card style="display: flex;" *ngFor="let item of list">
    <div (click)="check = !check">
      <mat-icon [innerText]="check ? 'favorite_border' : 'favorite'"></mat-icon>
    </div>
    <p style="margin: 0"> {{item.question}} </p>
  </mat-card>


при клике на одну иконку меняются все, а нужно для каждого mat-card отдельно.
Что я делаю не так?

Делал и через функцию:
<mat-card style="display: flex;" *ngFor="let item of list">
    <mat-icon (click) = "changeIcon('favorite_border')">{{iconName}}</mat-icon>
    <p style="margin: 0"> {{item.question}} </p>
  </mat-card>

iconName = 'favorite';
  
  changeIcon(newIcon:string) :void {
    this.iconName = newIcon;
   }


но то же самое. меняются все иконки

destus 03.07.2018 14:43

AlexTrust,
Переменная check определена в компоненте и применятся ко всем <mat-card>. Соответственно при клике на одну из иконок происходит изменение общей переменной check. Чтобы этого избежать, можно хранить состояние check не на уровне компонента, а на уровне модели item, которая используется для отображения mat-card.
<mat-card style="display: flex;" *ngFor="let item of list">
    <div (click)="item.check = !item.check">
      <mat-icon [innerText]="item.check ? 'favorite_border' : 'favorite'"></mat-icon>
    </div>
    <p style="margin: 0"> {{item.question}} </p>
  </mat-card>

AlexTrust 03.07.2018 14:56

destus,
Спасибо огромное.
Могу я у Вас уточнить еще один момент по поводу передачи объекта из одного компонента в другой?

destus 03.07.2018 15:13

AlexTrust,
Вы можете задавать вопросы на форуме, он же для этого и существует. Если кто-то из участников будет знать ответ на вопрос - подскажет.


Часовой пояс GMT +3, время: 08:47.