問題

私はsidenavとネストされたツールバーを持っています
または toolbar.html

 <md-sidenav-container fullscreen>
    <md-sidenav #sidenav mode="side" color="primary">
     <md-toolbar color="primary"><span>Sidenav</span></md-toolbar>
        <button md-button class="sidenav-link" (click)="sidenav.close()">
          <md-icon>home</md-icon><span class="title"> HOME</span>
          </button>
          <button md-button class="sidenav-link" (click)="sidenav.close()">
            <md-icon>home</md-icon><span class="title"> HOME</span>
          </button>
      </md-sidenav>
      <app-toolbar [sidenav]="sidenav"></app-toolbar>
</md-sidenav-container>
 

sidenav.html

 <md-toolbar color="primary">
  <button md-button class="toolbar-menu-button"
          (click)="sidenav.toggle(); isCollapsed = !isCollapsed">
    <md-icon [@iconChange]="isCollapsed">menu</md-icon>
  </button>
  <span class="toolbar-spacer"></span>
  <button md-button class="toolbar-link" >DASHBOARD</button>
  <span class="toolbar-spacer"></span>
</md-toolbar>
 

https://plnkr.co/edit/up19ZNJyMt6uatqdI9uv?p=preview

Navigation Drawerのようなホームアイコンまでsidenavを閉じたい

シデナフを閉じる sidenav close

オープンシデナフ sidenav open

  ベストアンサー

この問題はほとんど珍しいです。ツールバーのボタンがオープン状態とクローズ状態を制御しているので、ボタンをクリックするたびにEventListenerの状態を渡すためにsidenavを追加する必要がありました。

eventフラグに基づいて、sidenavの幅を維持するngStyleを追加しました。 sidenavは常に表示されているので、常に[add property opened="true"]が開いていることに注意してください。また、ツールバーから放出されたフラグを使用して 'Sdidav'タイトルを使用することになりました。部分的な 'Sid'を表示する必要がある場合は削除できます。

また、sidenavは常に開いているので、幅の変更をアニメーション化するカスタムCSSを追加しました。

Plunkerデモ

toolbar.component.ts:

 export class ToolbarComponent implements OnInit {

  shortnav = true;

  @Input() sidenav;

  @Output()
  change: EventEmitter<booelan> = new EventEmitter<boolean>();

  constructor() { 
    console.log(this.sidenav);
  }

  ngOnInit() {
  }

  toggle(){
    this.shortnav = !this.shortnav;
    console.log("shortnav: " + this.shortnav)
    this.change.emit(this.shortnav);
  }

}
 

toolbar.component.html:

 <button md-button class="toolbar-menu-button"
          (click)="toggle(); isCollapsed = !isCollapsed">
 

sidenav.component.ts:

 export class SidenavOverviewExample {

  showSidenavTitle = false;
  sidenavWidth = 2.75;

  changeWidth(showShortNav){
    if(showShortNav){
      this.sidenavWidth = 2.5;
      this.showSidenavTitle = false;
    }
    else{
      this.sidenavWidth = 13;
      this.showSidenavTitle = true;
    }
  }
}
 

sidenav.component.html:

 <md-sidenav-container fullscreen>
    <md-sidenav #sidenav mode="side"   
                color="primary" 
                opened="true"
                [ngStyle]="{ 'width.em': sidenavWidth }"
                class="animate-sidenav">
     <md-toolbar color="primary">
       <span *ngIf="showSidenavTitle">Sidenav</span>
     </md-toolbar>
        <button md-button class="sidenav-link" (click)="sidenav.close()">
          <md-icon>home</md-icon><span class="title"> HOME</span>
          </button>
          <button md-button class="sidenav-link" (click)="sidenav.close()">
            <md-icon>home</md-icon><span class="title"> HOME</span>
          </button>
      </md-sidenav>

      <app-toolbar [sidenav]="sidenav" (change)="changeWidth($event)"></app-toolbar>

 </md-sidenav-container>
 

sidenav.component.css:

 .mat-sidenav-transition .mat-sidenav{
  /* custom animation to grow and shrink width */
  -webkit-transition: width .3s !important; /* For Safari 3.1 to 6.0 */
  transition: width .3s !important;
}
 

これがあなたを助けることを願って:)

  同じタグがついた質問を見る

angularnavigation-drawertransitionangular-material2