Развернуть и свернуть строку при нажатии кнопки, которая находится в строке таблицы td in mat

        <table mat-table [dataSource]="dataSource" multiTemplateDataRows matSort class="mat-elevation-z8">

                <!-- Document Column -->
                <ng-container matColumnDef="document">
                    <th mat-header-cell *matHeaderCellDef mat-sort-header> Document </th>
                    <td mat-cell *matCellDef="let search; let i = index">
                        <button mat-button (click)="expandedElement = expandedElement === search ? null : search">Show
                            Log</button>
                        <!-- {{search.document}} -->
                    </td>
                </ng-container>

                    <!-- more containers -->
        <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->
            <ng-container matColumnDef="expandedDetail">
                <td mat-cell *matCellDef="let search" [attr.colspan]="displayedColumns.length">
                    <div class="example-element-detail"
                        [@detailExpand]="search == expandedElement ? 'expanded' : 'collapsed'">
                        <div class="example-element-description">
                            <div class="">
                                <div class="">
                                    <pre> {{search.document}</pre>
                                </div>
                            </div>
                        </div>
                    </div>
                </td>
            </ng-container>

            <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
            <tr mat-row *matRowDef="let search; columns: displayedColumns;" class="example-element-row"
                [class.example-expanded-row]="expandedElement === search"
                (click)="expandedElement = expandedElement === search ? null : search">`enter code here`
            </tr>
            <tr mat-row *matRowDef="let row; columns: ['expandedDetail']" class="example-detail-row"></tr>
        </table>

У меня есть матовая таблица с кнопкой в ​​столбце в каждой строке (как показано в общем коде выше). Я ищу расширение и свертывание строки (по одному) при переключении кнопок.

содержимое в ts-файле:

import { Component, OnInit, AfterContentInit, ViewChild } from '@angular/core';
//other component imports
import { MatTableDataSource, MatPaginator } from '@angular/material';
import {animate, state, style, transition, trigger} from '@angular/animations';

@Component({
  selector: 'app-search',
  templateUrl: './search.component.html',
  styleUrls: ['./search.component.css'],
  animations: [
    trigger('detailExpand', [
      state('collapsed', style({height: '0px', minHeight: '0'})),
      state('expanded', style({height: '*'})),
      transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
    ]),
  ],
})
export class SearchComponent implements OnInit {
  displayedColumns: string[] = ['document', 'timestamp', 'conversationId', 'microserviceName', 'responseStatusCode', 'host', 'clusterName', 'elapsedDuration'];
//other useful declarations
  expandedElement: SearchResponse | null;

  // set observables into datasource using MatTableDataSource
  public dataSource = new MatTableDataSource<SearchResponse>();

  constructor(private appService: AppService,
                    private toastr: ToastrService) { }
  ngOnInit() {
    //service call
  }
  //service call and functions
}

Не удалось выяснить, почему переключение кнопок не работает, а строка по умолчанию расширяется.


person Rashmi Choudhary    schedule 02.04.2020    source источник
comment
Пожалуйста, прочитайте При каких обстоятельствах я могу добавить «срочно» или другие подобные фразы к моему вопросу, чтобы получить более быстрые ответы? - Подводя итог, можно сказать, что это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.   -  person halfer    schedule 02.04.2020
comment
Отметил @halfer.. Буду воздерживаться от использования таких фраз в своих вопросах в дальнейшем. Спасибо!..   -  person Rashmi Choudhary    schedule 02.04.2020
comment
у вас есть Таблица с расширяемыми строками? является четвертым примером в документах: material.angular.io/components/table/examples   -  person Eliseo    schedule 02.04.2020
comment
@Eliseo, да, я просмотрел этот пример в угловом материале ... но мне нужно развернуть и свернуть с помощью кнопки-переключателя в этой строке, а не во всей строке. Только вот не знаю как.   -  person Rashmi Choudhary    schedule 02.04.2020
comment
просто напишите <button mat-button (click)="expandedElement = expandedElement === element ? null : element">Show Log</button>. Если вы хотите, чтобы уникальная строка расширялась во времени, вы используете уникальную переменную — в примере это переменная expandElement-   -  person Eliseo    schedule 02.04.2020
comment
@Eliseo я изменил код кнопки, как вы указали выше, и последовал 4-му примеру в документах: material.angular.io/components/table/examples.. строка расширяется по умолчанию, и переключение кнопки не работает. Невозможно понять, какую ошибку я сделал.   -  person Rashmi Choudhary    schedule 02.04.2020
comment
@Eliseo, я изменил свой вопрос с помощью моего текущего кода файла html и ts для лучшей видимости того, что я сделал.   -  person Rashmi Choudhary    schedule 02.04.2020
comment
@RashmiChoudhary, вам нужно добавить CSS в ваш search.component.css, смотрите мой ответ   -  person Eliseo    schedule 03.04.2020
comment
@Eliseo: Огромное спасибо! Это сработало именно так, как я хотел...   -  person Rashmi Choudhary    schedule 03.04.2020


Ответы (1)


вам нужно добавить в свой search.component.css

tr.example-detail-row {
  height: 0;
}
.example-element-detail {
  overflow: hidden;
  display: flex;
}
.example-element-row td {
  border-bottom-width: 0;
}

И удалите (щелкните) в строке

//this
<tr mat-row *matRowDef="let search; columns: displayedColumns;" 
     class="example-element-row"
     [class.example-expanded-row]="expandedElement === search"
     (click)="expandedElement = expandedElement === search ? null : search">
      `enter code here`
</tr>

стать как

<tr mat-row *matRowDef="let search; columns: displayedColumns;" 
   class="example-element-row"
   [class.example-expanded-row]="expandedElement === search">
</tr>

См. этот дурак stackblitz

person Eliseo    schedule 03.04.2020
comment
Для тех, кто ищет такой сценарий. Этот ответ отлично сработал для меня .. !! :) - person Rashmi Choudhary; 03.04.2020