Pagination controls for mat-tab-group do not appear when used with the mat-sidenav
See original GitHub issueI am trying to use the mat-sidenav with the mat-tab-group and there appears to be an issue with the pagination controls for the mat-tab-group. The test app will create 3 default tabs. If you add enough tabs so that there is just enough space to show the tabs without the tab pagination controls being displayed (based on your screen width), then open the sidenav by clicking the Toggle Sidenav button, the pagination controls do not appear in the tab control. Clicking the Add Tab button to add one more tab will force the tab control to reevaluate the horizontal space and then display the pagination controls for the tab control.
It appears that that the tab control is not aware that the horizontal space has decreased, because the sidenav is open, and does not show the pagination controls. The opposite is also true that if the pagination controls are displayed when the sidenav is open, when the sidenav is closed and there is enough horizontal space that the tab control no longer needs the pagination controls they do not disappear.
The desired behavior would be that the tab control will display or not display its pagination controls when necessary as the sidenav is open and closed.
<mat-sidenav-container fxFill>
<mat-sidenav #sidenav mode="side">
<div style="height: 100%; width: 300px; background-color: lightblue;">
<p>Sidenav</p>
</div>
</mat-sidenav>
<mat-sidenav-content>
<div fxLayout="column" fxFill>
<div fxFlex="0 1 0%" fxLayoutGap="5px" style="padding: 5px">
<button mat-stroked-button (click)="sidenav.toggle()">Toggle Sidenav</button>
<button mat-stroked-button (click)="addTab()">Add Tab</button>
</div>
<div fxFlex="1 1 0%">
<mat-tab-group>
<mat-tab *ngFor="let tab of tabs" label="{{tab.label}}">
<span>Tab content for {{tab.label}}</span>
</mat-tab>
</mat-tab-group>
</div>
</div>
</mat-sidenav-content>
</mat-sidenav-container>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
tabs: any[] = [{label: "tab1"}, {label: "tab2"}, {label: "tab3"}]
addTab() {
this.tabs.push({label: "tab" + (this.tabs.length + 1)})
}
}
Issue Analytics
- State:
- Created 3 years ago
- Comments:9 (5 by maintainers)
It looks like #13539 was supposed to “fix” this, inasmuch as the developer can know when the container width is supposed to change and manually run
updatePagination
. The docs only list that method as being available onMatTabNav
, though, not themat-tab-header
(owned byMatTabGroup
). As suggested elsewhere, this does actually work:but as you can see, I have to explicitly cast
_tabHeader
toMatTabHeader
because it’s typed asMatTabGroupBaseHeader
which doesn’t have anupdatePagination
method, as Juanfran points out above.@andrewseguin seems strange that that would be something the user would have to do at the application level.