我正在使用角度材质侧导航,我的菜单有一个子菜单。 当我打开子菜单时,会出现一个滚动条,使侧导航略大,它涵盖了一些主要内容。
查看此堆栈闪电战 https://stackblitz.com/edit/angular-raedvz,展开子菜单,您将看到行为。
默认情况下,Angular 材质只会在 nav.open、window.resize 或导航模式更改时调整容器的大小。您要么必须自己触发容器的大小调整,要么可以使用内置选项autosize
。但是他们告诉您使用它的风险由您自己承担,因为它可能会导致性能问题。
<mat-sidenav-container class="example-container" *ngIf="shouldRun" autosize>
堆栈闪电战示例:https://angular-wsvjf8.stackblitz.io
我测试的是您在提供的示例中,它确实对我有用。如果您遇到性能问题,因为您的应用程序所做的不仅仅是示例(显然(,您可能必须在toggleMenu
方法上触发自己调整大小。
https://material.angular.io/components/sidenav/overview#resizing-an-open-sidenav
更新您的评论:
我不确定这是否是正确的方法。 基于我在autosize
选项的代码中可以找到的内容。他们所做的是检查每个更改检测周期的边距,这就是为什么使用autosize
选项可能会导致性能问题的原因。 之后,他们调用私有函数_updateContentMargins
并更正容器的边距。
您可以使用ViewChild
并访问 MatSidenavContainer 并在您的toggleMenu
中调用该函数。但由于_updateContentMargins
函数本身是私有的,所以我不会使用它。 就个人而言,我想不出另一种方法可以做到这一点。
以下是在toggleMenu
中调用_updateContentMargins
的工作示例 https://stackblitz.com/edit/angular-segnwt:
我在这里使用setTimeout
因为 MatSidenavContainer 的_ngZone现在也是私有的。
添加autosize
属性应该可以解决您的问题。尽管这似乎对性能有影响。
看看这个 github 问题:https://github.com/angular/material2/issues/9601