【问题标题】:Angular 2 Side-bar to be closed whenever a route is changed每当更改路线时,Angular 2侧边栏都会关闭
【发布时间】:2017-05-10 01:52:44
【问题描述】:

我有一个侧边栏,您可以在点击外部或点击里面的 X 时关闭它。但是我需要在更改路线时自动关闭(例如从主页到关于或联系人保持打开状态,但我需要它折叠)

<md-toolbar class='toolbar' color="primary" >

  <button md-icon-button (click)="nav.open()">
    <md-icon class="md-24">menu</md-icon>
  </button>


</md-toolbar>

<md-sidenav-container>

  <md-sidenav #nav>
        <md-nav-list>
  <button md-icon-button (click)="nav.close()">
    <md-icon class="md-24">close</md-icon>
  </button>
      <a md-list-item routerLink='home'class="active"> Home </a>

      <a md-list-item routerLink='about' class= "page-scroll" > About us</a> 
    <a md-list-item routerLink='discount' class= "page-scroll" >Discounts </a>
    <a md-list-item routerLink='contact'class= "page-scroll" >Contact </a>
       <a md-list-item routerLink='order' class= "page-scroll" >Order</a>...


    .md-toolbar {
padding-top: 1em;
align-self: flex-start;
height:5em;


}


.toolbar{

  position: fixed;
  top: 0;
  left: 0;
  z-index: 9999;
  width: 100%;
  height: 50px;


}


md-nav-list{
     margin-left: 20px;
  margin-right: 10px;
    margin-top: 80px;
      font-size: 1.2em;
      font-family: Raleway;
}



@media screen and (max-width: 600px) {
  .logo {

display: none  }
  .search{

  }
}


html {
  height: 100%;
}
body {
  min-height: 100%;
  display: flex;
  flex-direction: column;
}

.container{
    margin-top: 100px;
        margin-bottom: 100px;
  flex: 1 0 auto;

}

When I choose another tab the background is still black and sidebar is opened, don't collapse

我发现一些看起来像是我需要的东西,但它是为 AngularJs 准备的。 pkozlowski.opensource 如何将它用于 Angular 2

如果您希望在路由成功更改时关闭所有打开的模式,您可以在一个中心位置通过监听 >$routeChangeSuccess 事件来执行此操作,例如在应用程序的运行块中:

var myApp = angular.module('app', []).run(function($rootScope, $uibModalStack) {
  $uibModalStack.dismissAll();
}); 

【问题讨论】:

    标签: navigation angular2-routing sidebar auto-close


    【解决方案1】:

    更简单的解决方案可能是监听路由器事件。

    @ViewChild('nav') sidenav;
    
    constructor(private router: Router) {
      router.events.subscribe((val) => {
        if (val instanceof NavigationEnd) {
          this.sidenav.close();
        }
      });
    }
    

    这样您就不必为每个链接添加点击事件。

    【讨论】:

    • 不错!处理也可能从导航中路由的嵌套组件。
    • 我喜欢这种方式而不是 DRY,但是 this.nav 或 this,sidenav - 我都试过了,但都不起作用;D
    • @MuhammedMoussa 我建议打开一个包含您的代码并说明您尝试过的新问题。
    【解决方案2】:

    您可以将(click)="nav.close()" 添加到您的所有链接中,这将非常容易实现,

     <a md-list-item (click)="nav.close()" routerLink='home'class="active"> Home </a>
     <a md-list-item (click)="nav.close()" routerLink='about' class= "page-scroll" > About us</a> 
     <a md-list-item (click)="nav.close()" routerLink='discount' class= "page-scroll" >Discounts </a>
     <a md-list-item (click)="nav.close()" routerLink='contact'class= "page-scroll" >Contact </a>
     <a md-list-item (click)="nav.close()" routerLink='order' class= "page-scroll" >Order</a>
    

    【讨论】:

    • 天哪,太容易了!!!你是天才!非常感谢!!!! : *****
    • 这样做会中断路由器,除了导航关闭之外什么也没有发生。没有路线变化
    • @YesBarry, cn 你添加了一个 plunker 示例?
    • 它不起作用你可以试试这个 (click)="sidenav.close()" 来关闭 sidenav
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2023-04-08
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多