Для пункта 4 в вашем списке, один из способов подойти к этому - добавить логическое свойство (которое я назвал expand
в моем примере) к каждому элементу, чтобы указать, развернут ли он или нет, как это ...
{ id: 1, startDate: today, endDate: today, position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H', expand: false }
Затем вы можете получить доступ к этому новому свойству в шаблоне через переменную element
(*matCellDef="let element"
).
Но сначала убедитесь, что вы передаете элемент при вызове функции щелчка, как это ...
<mat-icon (click)="toggleFloat(element)" class="sky_blue">more_horiz</mat-icon>
И измените функцию toggleFloat, чтобы изменить свойство раскрытия элемента этого элемента, а не showFloatingButtons
, как это ...
toggleFloat(element) {
element.exapand = !element.exapand;
console.log('show:' + element.exapand);
}
После этого вы можете исправить свой шаблон так, чтобы он начал использовать свойство элемента элемента вместо компонента, заменив showFloatingButtons
на element.exapand
во всех * ngIf для столбца символа, например так:
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Symbol </th>
<td mat-cell *matCellDef="let element">
<div [ngClass]="element.exapand ? 'floating-pane-active' : 'floating-pane-deactive'"
class="button-row">
<mat-icon mat-fab *ngIf="element.exapand" color="primary" class="floating-buttons">offline_pin
</mat-icon>
<mat-icon mat-fab *ngIf="element.exapand" color="primary" class="floating-buttons">query_builder
</mat-icon>
<mat-icon mat-fab *ngIf="element.exapand" color="primary" class="floating-buttons" disabled>restore
</mat-icon>
<mat-icon mat-fab *ngIf="element.exapand" color="primary" class="floating-buttons">
play_circle_filled</mat-icon>
<mat-icon (click)="toggleFloat(element)" class="sky_blue">more_horiz</mat-icon>
</div>
</td>
</ng-container>
Мне не ясно, что вы хотите с проблемой в пункте 5, но если вы собираетесь отобразить что-то специфическое для этого элемента, следуйте тому же принципу, который используется для функциональности расширения.
В качестве примечания: поскольку вы имеете дело с логическим значением, нет необходимости проверять равенство, подобное этому *ngIf="showFloatingButtons == true"
, мы можем просто сделать это *ngIf="showFloatingButtons"
.
см. Полное решение здесь https://stackblitz.com/edit/angular-1tgnev?file=src/app/app.component.html.