2017-02-04 16 views
0

私はsidenav(開いて閉じた状態)をトリガーしようとしています。私はこれを持っている:Angular2 HTMLディレクティブ内の#の意味は何ですか

<div class="viewport"> 
    <md-toolbar color="primary"> 
    <button *ngIf="!isNavbarOpen" md-icon-button (click)="sidenav.open()"><md-icon>menu</md-icon></button> 
    <button *ngIf="isNavbarOpen" md-icon-button (click)="sidenav.close()"><md-icon>close</md-icon></button> 
    <span class="toolbar-title">Title</span> 
    </md-toolbar> 
    <md-sidenav-layout> 
    <md-sidenav align="start" mode="over" #sidenav> 
     Sidenav 
    </md-sidenav> 
    </md-sidenav-layout> 
</div> 

にはどうすればいつでもsidenav状態変化isNavbarOpenフィールドを変更するには、私のtypescriptファイルから#sidenavを使用できますか?

または

どのように私はsidenav.open()メソッドをオーバーライドすることができますか?

+0

#は、基準 – MMK

+0

@MMKのおかげでバディを定義しています

<div class="viewport"> <md-toolbar color="primary"> <button *ngIf="!isNavbarOpen" md-icon-button (click)="open()"><md-icon>menu</md-icon></button> <button *ngIf="isNavbarOpen" md-icon-button (click)="close()"><md-icon>close</md-icon></button> <span class="toolbar-title">Title</span> </md-toolbar> <md-sidenav-layout> <md-sidenav align="start" mode="over" #sidenav> Sidenav </md-sidenav> </md-sidenav-layout> </div> 

は、代わりに "ViewChild" とMdSidenavを使用して、それを参照します。 – lbpeppers

答えて

1

これは、すべてのプロパティを使用してすべてのイベントを購読できるように、より良いアプローチです。 open()/ close()関数に渡さないでください。

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

@Component({ 
.... 
}) 
export class AppComponent implements OnInit { 
    public isNavbarOpen: boolean; 

    // This gets a reference to the #sidenav 
    @ViewChild('sidenav') sidenav: MdSidenav; 

    ngOnInit() { 
     // Subscribe to the onCloseStart event 
     this.sidenav.onCloseStart.subscribe(() => { 
      this.isNavbarOpen = true; 
     }); 
    } 

    open() { 
     this.sideNav.open(); 
    } 
} 
+0

助けてくれてありがとう。私はこれに関連する別の質問があります。私はsidenavについてのドキュメントを見て、onCloseStartというプロパティを持っています。どのように私はisNavbarOpenフィールドの値を変更するためにそのプロパティを使用できますか?そのプロパティーをイベント・エミッターとして使用します。 – lbpeppers

関連する問題