【问题标题】:Angular mat-sidenav with route带路由的角度 mat-sidenav
【发布时间】:2018-04-13 20:14:23
【问题描述】:

我想实现一个像 Ryanair 的结帐 www.ryanair.com/es/es/booking/extras (but first you have to select a flight) 这样的页面,当您单击按钮时,路线会更改 for example to .../extras/bags 并打开带有行李选项的侧导航,而不更改主页。

此外,如果您手动将/bags 添加到路线中,sidenav 仍然打开。

我有sidenav的所有不同元素,但我不知道如何将它们与路线联系起来。

我尝试在 sidenav 中使用额外的<router-outlet name="sidenav"></router-outlet>,但无法自动打开它

【问题讨论】:

    标签: angular material-design angular-material sidenav


    【解决方案1】:

    假设你的 sidenav 在另一个组件中,我们称它为 MainComponent,那么 MainComponent 的模板将如下所示:

    <div>Home Page</div>
    <button>Hello</button>
    <mat-sidenav #bagsSidenav> ... </mat-sidenav>
    

    首先您需要在您的应用模块或路由文件中设置路由。它应该看起来像这样:

    const routes: Routes = [
        { path: 'main/:openSidenav', component: MainComponent},
    ];
    

    路由的 :openSidenav 部分基本表示如果用户输入的路由是 www.mywebsite.com/main/bags,那么 "bags" 就是传入 openSidenav 参数的值。

    然后您需要在构造函数中将 Angular 路由器注入 MainComponent。然后你可以订阅路由参数来检查路径是否包含包,然后打开sidenav:

    @ViewChild('bagsSidenav') public bagsSidenav: MdSidenav;
    ...
    
    constructor(private router: Router) { }
    
    ngOnInit() {
        this.route.params.subscribe((params) => {
             if (params.openSidenav === 'bags') {
                 bagsSidenav.open();
             }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      相关资源
      最近更新 更多