首页 文章

角度6材料 . 如何为mat-sidenav-container制作橡胶?

提问于
浏览
0

我有响应 mat-sidenav 用Angular Material 6生成 . 导航面板的打开/关闭按钮工作非常好,但是导航面板是打开pannel的部分内容 .

如何使内容部分像橡胶:

<!--CONTENT-->
<main>
    <router-outlet></router-outlet>
</main>

我的意思是当导航栏关闭时,内容宽度是页面的100% . 但是当导航栏打开然后内容压缩到85%(我的导航栏有 width: 15%

这是模板:

<mat-sidenav-container class="sidenav-container">
    <mat-sidenav
        mode="side"
        #drawer
        class="sidenav"
        [(opened)]="isOpened"
        fixedInViewport="true"
        [attr.role]="(isHandset$ | async) ? 'dialog' : 'navigation'"
        [mode]="(isHandset$ | async) ? 'over' : 'side'"
        [opened]="(isHandset$ | async)"
    >
        <mat-nav-list>
            <span
                *ngFor="let link of links"
                routerLinkActive="active"
            >
                <a mat-list-item [routerLink]="[link.url]">
                    {{link.name}}
                </a>
            </span>
            <span style="position: absolute; bottom: 1px; width: 100%">
                <a mat-list-item class="waves-effect waves-orange" (click)="logout($event)">
                    Выйти
                </a>
            </span>
        </mat-nav-list>
    </mat-sidenav>
    <mat-sidenav-content>
        <mat-toolbar color="primary">

            <button mat-icon-button (click)="drawer.toggle()">
                <mat-icon>menu</mat-icon>
            </button>
            <span style="margin-left: 45%">Oasis Bot Manager</span>
        </mat-toolbar>
    </mat-sidenav-content>
</mat-sidenav-container>

<!--CONTENT-->
<main [ngStyle]="{'width': isOpened ? '85%' : '100%'}">
    <router-outlet></router-outlet>
</main>

TypeScript方面:

export class SiteLayoutComponent {
    links = [
        {url: '/vds_list', name: 'Статистика'},
        {url: '/profile', name: 'Личный кабинет'}
    ];

    isOpened;

    isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset)
        .pipe(
            map(result => result.matches)
        );

    constructor(private breakpointObserver: BreakpointObserver,
                private auth: AuthService,
                private router: Router) {
    }

    logout(event: Event) {
        event.preventDefault();
        this.auth.logout();
        this.router.navigate(['/login']);
    }
}

我正在尝试通过 [ngStyle]width 内容绑定到 [(opened)]="isOpened"[(opened)]="isOpened" 状态 .

但不行 . 如何解决这种情况?

1 回答

  • 1

    您的内容区域必须位于工具栏下方的mat-sidenav-container内:

    <mat-sidenav-container class="sidenav-container">
        <mat-sidenav
            mode="side"
            #drawer
            class="sidenav"
            [(opened)]="isOpened"
            fixedInViewport="true"
            [attr.role]="(isHandset$ | async) ? 'dialog' : 'navigation'"
            [mode]="(isHandset$ | async) ? 'over' : 'side'"
            [opened]="(isHandset$ | async)"
        >
            <mat-nav-list>
                <span
                    *ngFor="let link of links"
                    routerLinkActive="active"
                >
                    <a mat-list-item [routerLink]="[link.url]">
                        {{link.name}}
                    </a>
                </span>
                <span style="position: absolute; bottom: 1px; width: 100%">
                    <a mat-list-item class="waves-effect waves-orange" (click)="logout($event)">
                        Выйти
                    </a>
                </span>
            </mat-nav-list>
        </mat-sidenav>
        <mat-sidenav-content style="display:flex; flex-direction:column;">
            <mat-toolbar color="primary">
    
                <button mat-icon-button (click)="drawer.toggle()">
                    <mat-icon>menu</mat-icon>
                </button>
                <span style="margin-left: 45%">Oasis Bot Manager</span>
            </mat-toolbar>
            <!--CONTENT-->
            <main>
                <router-outlet></router-outlet>
            </main>
        </mat-sidenav-content>
    </mat-sidenav-container>
    

相关问题