如何在组件内使用Angular 2 Material Sidenav?

时间:2016-07-29 07:13:05

标签: javascript angularjs angular

我是棱角分明的新手,我正试图在这里理解绳索。新的角度2材料的文档有点令人困惑但我设法添加选项卡和sidenav到我的应用程序但我不能使用我的组件打开sidenav按钮。这个例子是我对它如何完成的唯一参考,并且不太了解它我认为它使用的是角1? https://material.angularjs.org/latest/demo/sidenav

我现在在我的组件中拥有的是:

import { Component, OnInit, OnDestroy, ElementRef, Inject } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import {Http, Response} from '@angular/http';

import { MD_TABS_DIRECTIVES } from '@angular2-material/tabs';
import { MD_SIDENAV_DIRECTIVES } from '@angular2-material/sidenav';

@Component({
selector: 'my-ambient-detail',
templateUrl: 'app/ambients/ambient-detail.component.html',
directives: [MD_TABS_DIRECTIVES, MD_SIDENAV_DIRECTIVES],
})
export class AmbientDetailComponent implements OnInit, OnDestroy {


// constructor and other functions here

openRightMenu(){
   //WHAT GOES HERE?
}

}

在html中:

<md-sidenav-layout>

<!-- Content -->
<md-content>

    <md-button (click)="openRightMenu()">
    Open Right Menu
    </md-button>

</md-content>

<!-- Sidebar -->
<md-sidenav md-component-id="right" class="md-sidenav-right">

Sidebar content
</md-sidenav>
</md-sidenav-layout>

因此,我无法使用组件中的功能找到关于如何使用按钮打开/关闭sidenav的明确参考。也许我这样做是错的,我直接从角度网站的英雄教程开始构建我的应用程序,但我对这个主题的搜索中的角度1和2之间非常困惑。

2 个答案:

答案 0 :(得分:3)

您需要通过id(#sidenav)获取对元素的ViewChild引用,并将其键入MdSidenav组件。请注意,ViewChild引用在构造函数中尚不可用,但仅在init。

之后
import { Component, ViewChild, OnInit } from '@angular/core';
import { MdSidenav } from '@angular/material';

@Component({
    ...,
    template: `
        <md-sidenav-container>
            <md-sidenav #sidenav mode="side" opened="false"></md-sidenav>
        </md-sidenav-container>
       `
})

export class MyComponent implements OnInit {
    @ViewChild('sidenav') sidenav: MdSidenav;

    constructor() {}

    ngOnInit() {
        this.sidenav.onOpen.subscribe(() => {
            console.log("Sidenav opened");
        });

        setTimeout(this.openSidenav.bind(this), 5000);
    }

    openSidenav() {
        this.sidenav.open();
    }
 }

答案 1 :(得分:1)

显然确实是棱角分明1,我终于找到了这个:https://justindujardin.github.io/ng2-material/#/components/sidenav似乎使用了角度2,我甚至不需要在我的组件中有一个函数:

<md-sidenav-layout>

  <!-- Content -->
  <md-content>
    <md-button (click)="right.open()">
      Open Right Menu
    </md-button>
  </md-content>

  <!-- Sidebar -->
  <md-sidenav #right md-component-id="right" class="md-sidenav-right">
    Sidebar content
  </md-sidenav>

</md-sidenav-layout>