не могу передать в функцию нужный индекс для элемента, мне нужно чтоб класс задавался только для выбраного элемента

166
07 апреля 2019, 03:30
<div class="item-row" *ngFor="let item of portfolio; let i = index">
  <div class="row-box">
    <div class="items-box" [ngClass]="{'description-close': hideDesc, 'description-open': showDesc}">
      <h2 class="title-portfolio">{{item.title}}</h2>
      <div class="desc-portfolio">{{item.description}}</div>
    </div>
    <span class="read-more" (click)="changeClass(i)">read more...</span>
  </div>
</div>
    public showDesc: boolean = false; 
public hideDesc: boolean = true; 
changeClass(i) 
{ 
if(this.showDesc === false && this.hideDesc === true){ 
this.showDesc = true; 
this.hideDesc = false }
else{
 this.showDesc = false;
 this.hideDesc = true }
 }
Answer 1

Мне кажется вы все усложнили, было бы проще просто делать toggle этого класса:

<div class="item-row" *ngFor="let item of portfolio">
    <div class="row-box">
        <div class="items-box" #box>
            <h2 class="title-portfolio">{{ item.title }}</h2>
            <div class="desc-portfolio">{{ item.description }}</div>
        </div>
        <span class="read-more" (click)="changeClass(box)">read more...</span>
    </div>
</div>

Компонент:

private descriptionOpenedClass = 'description-open';
private descriptionClosedClass = 'description-close';
constructor(private renderer: Renderer2) {}
public changeClass(box: HTMLDivElement): void {
    const descriptionOpened = box.classList.contains(this.descriptionOpenedClass);
    if (descriptionOpened) {
        this.renderer.removeClass(box, this.descriptionOpenedClass);
        this.renderer.addClass(box, this.descriptionClosedClass);
    } else {
        this.renderer.removeClass(box, this.descriptionClosedClass);
        this.renderer.addClass(box, this.descriptionOpenedClass);
    }
}

UPD:

Либо же мутировать объект из массива portfolio, добавляя ему новое свойство:

<div class="item-row" *ngFor="let item of portfolio">
    <div class="row-box">
        <div class="items-box" [ngClass]="{
            'description-open': item.descriptionOpened,
            'description-close': !item.descriptionOpened
        }">
            <h2 class="title-portfolio">{{ item.title }}</h2>
            <div class="desc-portfolio">{{ item.description }}</div>
        </div>
        <span class="read-more" (click)="changeClass(item)">read more...</span>
    </div>
</div>

Компонент:

public changeClass(item: any): void {
    // изначально свойство `descriptionOpened` не существует
    // поэтому `!undefined => true`
    item.descriptionOpened = !item.descriptionOpened;
}
READ ALSO
SQL запрос для каждого - все

SQL запрос для каждого - все

Имя, фамилия, номер, вид спорта, очки, штрафы

191
gulp-w3cjs как определить, что произошла ошибка

gulp-w3cjs как определить, что произошла ошибка

Делаю сборку gulp и застрял на валидации html Нашел плагин w3cjs и с помощью gulp-notify хотел бы выводить сообщение 'ошибка валидации смотри терминал',...

217
Не могу разобраться с меню для мобилок

Не могу разобраться с меню для мобилок

Вот линк на страницу: [http://ulsdtraduga

196