繁体   English   中英

Angular Material mat-sidenav-content 未显示

[英]Angular Material mat-sidenav-content not showing

角度材质版本:@angular/material@14.0.2

我是第一次使用 Angular 框架构建 Web 应用程序。 app-routing-module 延迟加载一个仪表板模块,该模块声明所需的组件并导入所需的模块。 仪表板模块导入一个仪表板路由模块,该模块包含以 WrapperComponent 作为父级、侧导航内容作为子级的路由,分成不同的组件。

仪表板-routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AboutComponent } from './components/about/about.component';
import { DashboardComponent } from './components/dashboard/dashboard.component';
import { LoginComponent } from './components/login/login.component';
import { WrapperComponent } from './components/wrapper/wrapper.component';

const routes: Routes = [
{
    path: '',
    component: WrapperComponent,
    children: [
        {
            path: 'dashboard', // --> localhost:4200/dashboard
            component: DashboardComponent,
        },
        {
            path: 'login', // --> localhost:4200/login
            component: LoginComponent,
        },
        {
            path: 'about', // --> localhost:4200/about
            component: AboutComponent,
        }
    ]
},
{
    path: '**',
    redirectTo: '/dashboard',
    pathMatch: 'full'
}
];

@NgModule({
     imports: [RouterModule.forChild(routes)],
     exports: [RouterModule]
})
export class DashboardRoutingModule { }

wrapper.component.html

<mat-sidenav-container>
<mat-sidenav #sideNav mode="side" opened="opened">
    <app-side-nav>
    </app-side-nav>
</mat-sidenav>
<mat-sidenav-content>
    <router-outlet></router-outlet>
</mat-sidenav-content>
</mat-sidenav-container>

app-side-nav 组件由路由器链接组成。

<div class="sidenav">
<div class="logo">
    <a (click)="toggleMenuState()" class="simple-text logo-mini">
        <div class="logo-img">
            <img src="./assets/images/sample_logo.png" alt="logo">
        </div>
    </a>
</div>

<ul class="nav">
    <li class="active nav-list-item"><a routerLink="/default-route"><i class="fa fa-dashboard fa-nav-icon"><span class="nav-item-text">Dashboard</span></i></a></li>
    <li class="nav-list-item"><a routerLink="/some-route"><i class="fa fa-group fa-nav-icon"><span class="nav-item-text">Groups</span></i></a></li>
    <li class="nav-list-item"><a routerLink="/some-route"><i class="fa fa-line-chart fa-nav-icon"><span class="nav-item-text">Charts</span></i></a></li>
    <li class="nav-list-item"><a routerLink="/some-route"><i class="fa fa-book fa-nav-icon"><span class="nav-item-text">Portfolio</span></i></a></li>
    <li class="nav-list-item"><a routerLink="/login"><i class="fa fa-user fa-nav-icon"><span class="nav-item-text">Login</span></i></a></li>
    <li class="nav-list-item"><a routerLink="/some-route"><i class="fa fa-gear fa-nav-icon"><span class="nav-item-text">Settings</span></i></a></li>
</ul>

这似乎工作正常,因为我可以看到根据单击的按钮在 DOM 中加载的相关内容。 但由于某种原因,内容不可见。 这是加载的仪表板组件的屏幕截图。 出于某种原因,它以 1920 像素的边距加载,但即使删除,内容仍然不可见。 应用程序 DOM

该结构似乎有效,但有些地方不太正确,否则内容会显示。 将不胜感激任何想法,建议或进一步的问题。

我认为您的问题很重要,认为您的 app-side-nav 或 mat-sidenav 具有全屏宽度,在我可以看到的屏幕截图中,内容的左侧边距为 1920px,这意味着您的视图超出了屏幕。 你的截图 我的示例具有正确的边距,请注意您的导航组件: 我的截图 Stackblitz 示例希望这会有所帮助。

检查呈现的模板后,您的代码似乎缺乏路由精度。

您的app-routing.module.ts说对于路径""它应该使用DashboardModule 在模块中,您说对于路径""它应该呈现WrapperComponent 在此之后,它没有默认路由。

所以,基本上发生的事情是你的包装器组件被渲染了,但是它的子组件都不匹配路由。 要修复它,您有两种选择:

  • 在包装子路由中为“”路由提供处理程序
  • 就像我在您的 GitHub 项目的 Stackblitz 分支中所做的那样,使用通配符路由向其中一个路由添加重定向。

Stackblitz 前叉

那就是修复路由器插座不渲染任何东西。

另一个问题是<mat-sidenav #sideNav mode="side" opened="opened"> ,因为您正在为布尔标志分配一个字符串,这意味着它将始终是真实的并且不会显示下面的内容。

结果删除opened="opened"并添加重定向到仪表板页面,我们可以看到“仪表板工作!”

在此处输入图像描述

PS 查看文档中的示例,它看起来并没有按照您希望的方式工作。 而是显示或隐藏行为。 不展开。

PSS 您可以尝试按照此处的建议为永远打开的 sidenav 手动使用自动调整大小和切换宽度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM