как мне условно отображать угловые матовые вкладки на меньшем экране?

avatar
user1126248
1 июля 2021 в 16:25
402
1
0

Я хочу разместить содержимое во вкладках, но только на меньшем экране. В противном случае содержимое должно просто возвращаться к блокам div (или к другому макету, определенному в css). Для меньшего экрана ( @media only screen и (max-width:600px) ) должна появиться вкладка

<mat-tab-group >
  <mat-tab label="First"><div> Content 1 </div></mat-tab>
  <mat-tab label="Second"><div> Content 2 </div></mat-tab>
  <mat-tab label="Third"><div> Content 3</div> </mat-tab>
</mat-tab-group>

Теперь для большего экрана он должен вернуться к трем блокам div

<div> Content 1 </div>
<div> Content 2 </div>
<div> Content 3</div> 

Как мне добиться этого, используя один блок кода на вкладках материала angular/angular?

Источник

Ответы (1)

avatar
Blunderchips
1 июля 2021 в 17:25
0

Вы сможете сделать это с помощью CDK Layout BreakpointObserver и разбить содержимое на отдельные компоненты. Например:

import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
import { Component } from '@angular/core';
import { Observable } from 'rxjs';
import { map, shareReplay } from 'rxjs/operators';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  
  isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset)
    .pipe(
      map(result => result.matches),
      shareReplay()
    );

  constructor(
    private breakpointObserver: BreakpointObserver,
  ) { }

}

<ng-container *ngIf="(isHandset$ | async) === true; then thenTemplate; else elseTemplate"></ng-container>

<ng-template #thenTemplate>
    <mat-tab-group>
      <mat-tab label="First"><div> <app-content-1></app-content-1> </div></mat-tab>
      <mat-tab label="Second"><div> <app-content-2></app-content-2> </div></mat-tab>
      <mat-tab label="Third"><div <app-content-3></app-content-3> </div> </mat-tab>
    </mat-tab-group>
</ng-template>

<ng-template #elseTemplate>
    <div>
      <div> <app-content-1></app-content-1> </div>
      <div> <app-content-2></app-content-2> </div>
      <div> <app-content-3></app-content-3> </div> 
    </div>
</ng-template>

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

Изменить: Перевернуто ng-if

user1126248
8 июля 2021 в 15:44
1

Спасибо! Это близко к тому, что я хотел.