Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2材料设计中的可重用Sidenav_Angular_Angular2 Forms - Fatal编程技术网

Angular2材料设计中的可重用Sidenav

Angular2材料设计中的可重用Sidenav,angular,angular2-forms,Angular,Angular2 Forms,我已经开始学习角度和材料设计。我想创建一个包含以下组件的应用程序。请参见下图以供参考 汉堡菜单按钮。轻敲它将露出侧面板 侧板。它将有几个其他的选择。此菜单在所有应用程序屏幕中都很常见 我已经创建了3个在图像中可见的组件。right-menu-component.html如下所示 <md-sidenav #sidenav mode="side" class="app-sidenav"> <ul> <li>Menu Item</li>

我已经开始学习角度和材料设计。我想创建一个包含以下组件的应用程序。请参见下图以供参考

  • 汉堡菜单按钮。轻敲它将露出侧面板
  • 侧板。它将有几个其他的选择。此菜单在所有应用程序屏幕中都很常见
  • 我已经创建了3个在图像中可见的组件。right-menu-component.html如下所示

    <md-sidenav #sidenav mode="side" class="app-sidenav">
      <ul>
        <li>Menu Item</li>
        <li>Menu Item</li>
        <li>Menu Item</li>
        <li>Menu Item</li>
        <li>Menu Item</li>
        <li>Menu Item</li>
      </ul>
    </md-sidenav>
    
    编辑3: 以下是模块的版本

    angular-cli: 1.0.0-beta.28.3
    node: 6.9.5
    os: darwin x64
    @angular/animations: 4.1.3
    @angular/common: 2.4.10
    @angular/compiler: 2.4.10
    @angular/core: 2.4.10
    @angular/forms: 2.4.10
    @angular/http: 2.4.10
    @angular/material: 2.0.0-beta.3
    @angular/platform-browser: 2.4.10
    @angular/platform-browser-dynamic: 2.4.10
    @angular/router: 3.4.10
    @angular/compiler-cli: 2.4.10
    

    创建一个服务来处理sidenav和工具栏之间的连接

    sidenav.service.ts

    @Injectable()
    export class SidenavService {
      toggle = new EventEmitter();
    
      constructor() {
      }
    }
    
    export class ToolbarComponent implements OnInit {
    
      constructor(public sidenavService: SidenavService) { }
    }
    
    @ViewChild('sidenav') sidenav: MdSidenav;
    
    constructor(private sidenavService: SidenavService) {
    
        this.sidenavService.toggle
           .asObservable()
           .subscribe(
              () => this.sidenav.toggle()
           );
    }
    
    toolbar.component.ts

    @Injectable()
    export class SidenavService {
      toggle = new EventEmitter();
    
      constructor() {
      }
    }
    
    export class ToolbarComponent implements OnInit {
    
      constructor(public sidenavService: SidenavService) { }
    }
    
    @ViewChild('sidenav') sidenav: MdSidenav;
    
    constructor(private sidenavService: SidenavService) {
    
        this.sidenavService.toggle
           .asObservable()
           .subscribe(
              () => this.sidenav.toggle()
           );
    }
    
    toolbar.component.html

    <md-toolbar color="primary" fxLayout="row" color="none">
      <button ... (click)="sidenavService.toggle.emit()"> ... </button>
    </md-toolbar>
    
    <md-sidenav #sidenav>...</md-sidenav>
    
    sidenav.component.html

    <md-toolbar color="primary" fxLayout="row" color="none">
      <button ... (click)="sidenavService.toggle.emit()"> ... </button>
    </md-toolbar>
    
    <md-sidenav #sidenav>...</md-sidenav>
    
    。。。
    
    显而易见的解决方案是将按钮和侧边栏放在根页面上,并使用它来更改所有内容else@elasticrash:请阅读编辑。此外,您可以共享一些从不同页面调用/显示右菜单(sidenav)的代码吗?实现这一点还有其他稍微复杂的方法,例如通过路由保护将组件动态注入视图中。这与我用你描述的方法尝试的方法非常相似。单击按钮会在sidenav.component.ts中出现错误“sidenav.toggle不是一个函数”。log(sidenav)打印“ElementRef{nativeElement:md sidenav.app sidenav}”,我再次测试了它,但对我来说它工作正常。你能告诉我更多关于你的问题吗?或者您使用的是哪个版本的材料我已经在Edit 3中添加了版本如果您确定,您已经像我一样做了所有事情,请尝试更新您的软件包。我正在研究angular 4.1.3、cli 1.1.0和angular material beta-6,可能有些变化:-)将material更新为2.0,但在编译代码时出错很多。此外,文档()中的示例在材料网站本身中似乎无法正常工作。