Я бы предложил написать свой. Мой сайт использует несколько версий этого для разных типов экранов, так что вот пара решений.
Logi c
Независимо от того, что вам сначала понадобится переключатель, чтобы определить, какие разделы расширены.
Expand Any
Дайте вашему keyfields
объекту expanded
логическое значение. Таким образом, каждый объект ngFor содержит свой собственный переключатель «is open».
Expan only One
Создайте новую переменную publi c в своем компоненте, которая имеет index расширенного раздела.
(для этого нужно использовать синтаксис индекса ngFor):
<tr *ngFor="let keyfield of keyfields; index as i">
HTML
Angular имеет много решений для чего Вы хотите, и это действительно предпочтение. Мой сайт использует angular анимации, и он также использует стандарт s css для мобильной версии (до вас).
Для обоих решение одно и то же. Пишите стили для скрытия вашего контента; используйте компонент logi c, чтобы установить текущее состояние (анимированное или css).
Анимации
Здесь у таблицы есть автомат c высота.
@Component({
...
animations: [
trigger('keyfieldExpanded', [
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)')),
]),
],
})
а затем что-то подобное для вашего html:
<td class="element-detail" [@keyfieldExpanded]="keyfield.expanded ? 'expanded' : 'collapsed'">
expanded content here
</td>
CSS
Это более простое решение. Если вы не хотите анимацию, просто используйте скрытый атрибут, ngclass или ngstyle.
Все они могут использовать один и тот же переключатель: keyfields.expanded
или i == expanded
, если вы go для Расширить только один вариант.
Подробнее
С моим предложением это на самом деле довольно просто.
(взято из кода выше):
<tr *ngFor="let keyfield of keyfields">
<td>{{keyfield.keyName | uppercase }}</td>
<td>{{keyfield.description}}</td>
<td>{{keyfield.format}}</td>
<td>{{keyfield.formatNotes}}</td>
<td>{{keyfield.xmL_Tag}}</td>
<td [hidden]="keyfield.expanded == true"><button (click)="keyfield.expanded = true">read more</button></td>
<td [@detailExpand]="keyfield.expanded ? 'expanded' : 'collapsed'">
<p>{{keyfield.expandedContent}}</p>
<button (click)="keyfield.expanded = false">read less</button>
</td>
</tr>