[英]Angular Material: clicking item in mat-sidenav should change content in 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 像素的边距加载,但即使删除,内容仍然不可见。
该结构似乎有效,但有些地方不太正确,否则内容会显示。 将不胜感激任何想法,建议或进一步的问题。
我认为您的问题很重要,认为您的 app-side-nav 或 mat-sidenav 具有全屏宽度,在我可以看到的屏幕截图中,内容的左侧边距为 1920px,这意味着您的视图超出了屏幕。 我的示例具有正确的边距,请注意您的导航组件: Stackblitz 示例希望这会有所帮助。
检查呈现的模板后,您的代码似乎缺乏路由精度。
您的app-routing.module.ts
说对于路径""
它应该使用DashboardModule
。 在模块中,您说对于路径""
它应该呈现WrapperComponent
。 在此之后,它没有默认路由。
所以,基本上发生的事情是你的包装器组件被渲染了,但是它的子组件都不匹配路由。 要修复它,您有两种选择:
那就是修复路由器插座不渲染任何东西。
另一个问题是<mat-sidenav #sideNav mode="side" opened="opened">
,因为您正在为布尔标志分配一个字符串,这意味着它将始终是真实的并且不会显示下面的内容。
结果删除opened="opened"
并添加重定向到仪表板页面,我们可以看到“仪表板工作!”
PS 查看文档中的示例,它看起来并没有按照您希望的方式工作。 而是显示或隐藏行为。 不展开。
PSS 您可以尝试按照此处的建议为永远打开的 sidenav 手动使用自动调整大小和切换宽度
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.