Angular 5材料mat-sidenav切换不起作用

时间:2018-06-11 18:25:30

标签: angular5 toggle angular-material2 mat-sidenav

我正在尝试使用官方open/close example让sidenav工作。

我是Angular的新手,所以我不确定一切应该如何工作,但到目前为止,对于其他组件我只是抓住示例的HTML部分并修改CSS。

经过一些反复试验后,我发现 mat-sidenav-content 不是sidenav的内容,而是页面/网站内容。

要尝试并获得一些有用的功能,我现在已经这样做了,在我的 app.component.html 中(一旦我弄明白,可能会稍后进入指令/组件) :

<mat-sidenav-container class="all-wrap" fullscreen>
  <mat-sidenav #sidenav mode="side" opened>
  yo
  </mat-sidenav>


<mat-sidenav-content>

<app-top-nav></app-top-nav>
<router-outlet></router-outlet>
     
<app-footer-nav></app-footer-nav>
    </mat-sidenav-content></mat-sidenav-container>

该示例在 mat-sidenav 上使用 [(已打开)] =“已打开”。这只会让我关闭导航,只需使用打开就可以打开它。无论哪种方式,切换都会被打破。此处的切换位于 topnav.html

<div class="pageFullNav">
  <nav class="docs-navbar">
      
        <a mat-button (click)="sidenav.toggle()"><i class="material-icons">menu</i></a>   

... etc />

控制台在切换时失败。

TopNavComponent.html:5 ERROR TypeError: Cannot read property 'toggle' of undefined
    at Object.eval [as handleEvent] (TopNavComponent.html:5)
    at handleEvent (core.js:13589)
    at callWithDebugContext (core.js:15098)
    at Object.debugHandleEvent [as handleEvent] (core.js:14685)
    at dispatchEvent (core.js:10004)
    at eval (core.js:10629)
    at HTMLAnchorElement.eval (platform-browser.js:2628)
    at ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:4751)
    at ZoneDelegate.invokeTask (zone.js:420)

我认为这可能与缺少的材料模块有关,但据我所知,我有所有相关的模块。

import { NgModule } from '@angular/core';
import {MatButtonModule, MatCheckboxModule, MatInputModule, MatMenuModule, MatSidenavModule, MatButtonToggleModule, MatExpansionModule, MatRippleModule} from '@angular/material';

// add only required modules


@NgModule({
  imports: [MatButtonModule, MatCheckboxModule, MatInputModule, MatMenuModule, MatSidenavModule, MatButtonToggleModule, MatExpansionModule, MatRippleModule],
  exports: [MatButtonModule, MatCheckboxModule, MatInputModule, MatMenuModule, MatSidenavModule, MatButtonToggleModule, MatExpansionModule, MatRippleModule]
})
export class CustomMaterialModule { }

如果有任何帮助明确要修改哪些文件/部分,我会很感激,因为这个环境对我来说相对较新。谢谢!

1 个答案:

答案 0 :(得分:0)

p4r1解决。再次感谢。

解决方案是将切换控件移动到与 side-nav 相同的文件中。

<mat-sidenav-container class="all-wrap" fullscreen>
  <mat-sidenav #sidenav mode="side" opened>
  <h3>navigate</h3>
  </mat-sidenav>


<mat-sidenav-content>
    <a mat-button (click)="sidenav.toggle()"><i class="material-icons">menu</i></a>