页面加载时如何不打开mat-sidenav

Posted

技术标签:

【中文标题】页面加载时如何不打开mat-sidenav【英文标题】:How not to open mat-sidenav when page loads 【发布时间】:2020-05-11 06:36:09 【问题描述】:

我已经获得了使用 BehaviorSubject 进行 mat-sidenav 切换的服务。

service.ts

    export class ToggleSidenavService 
       public sideNavToggleSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(null);

       public toggle() 
          return this.sideNavToggleSubject.next(null);
       
    

Component.html

      @ViewChild('sidenav', static: true) public sidenav: MatSidenav;

     ngOnInit() 
        this.sidenavService.sideNavToggleSubject.subscribe(() => 
        this.sidenav.toggle();
       );
     

Sidenav 切换工作正常,但它总是在页面加载时打开。我该如何解决这个问题?

【问题讨论】:

你如何控制sideNavToggleSubject 打开/关闭模态,它看起来总是发出null值。剂量是否意味着始终开放? 按钮可以切换sidenav打开/关闭状态 【参考方案1】:

为确保在页面加载时始终关闭Sidenav,请在 html 模板中将opened 属性设置为false

<mat-sidenav #sidenav mode="side" opened="false">
  Sidenav content
</mat-sidenav>

要以编程方式关闭Sidenav,您可以调用ngAfterViewInit() 中的close() 方法,但如果设置了opened,则无需这样做。

@ViewChild('sidenav', static: true) public sidenav: MatSidenav;

ngAfterViewInit() 
    this.sidenav.close();

【讨论】:

是的,它可以工作,但我可以看到 sidenav 在视图初始化后如何播放关闭动画 @OlegShchegolev 查看在 HTML 模板中设置 opened 属性的更新答案。

以上是关于页面加载时如何不打开mat-sidenav的主要内容,如果未能解决你的问题,请参考以下文章

打开控制台时如何不重新加载我的页面?

如何在引导程序中的页面加载时打开模式对话框

如何在没有 jquery 的情况下在 Angular 中的页面加载时自动打开 HTML 日历

iframe页面 JS问题.加载了不执行或者没完全加载如何解决

如何在 HTML 页面加载时使用 JFrames 打开 Applet

如何在页面加载后启动 Bootstrap 切换按钮,如果打开则不调用回调