2017-02-04 106 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場每當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