材料2 md-tab-nav-bar包裹在手机上

时间:2017-04-28 14:30:51

标签: angular material-design angular-material2

我想使用标签进行导航。我跟着the documentation逐字:

<nav md-tab-nav-bar>
  <a md-tab-link
     *ngFor="let link of navLinks"
     [routerLink]="link"
     routerLinkActive #rla="routerLinkActive"
     [active]="rla.isActive">
    {{tabLink.label}}
  </a>
</nav>

<router-outlet></router-outlet>

这在桌面上看起来很棒:

Looks great on desktop

但在手机上看起来很可怕:

enter image description here

如果我使用md-tab-group(非导航)标签,它们在移动设备上看起来很棒:

<md-tab-group>
  <md-tab label="Navigation tab 1"></md-tab>
  <md-tab label="Navigation tab 2"></md-tab>
  <md-tab label="Navigation tab 3"></md-tab>
  <md-tab label="Navigation tab 4"></md-tab>
  <md-tab label="Navigation tab 5"></md-tab>
</md-tab-group>

enter image description here

我做错了什么,或者这是材料2中的错误?有没有办法让md-tab-nav-bar响应,或让md-tab-group作为导航栏工作?

4 个答案:

答案 0 :(得分:2)

是的,<nav mat-tab-nav-bar>不能用作<mat-tab-group>。我使用的一种可能的快速解决方案就是让容器滚动:

.mat-tab-nav-bar {
  white-space: nowrap;
  overflow: auto;
}

哪个看起来可以接受且足够干净,但在滚动时会显示原生滚动条。

答案 1 :(得分:1)

I just found this issue概述了md-tabs和md-tab-nav-bar之间的脱节:

  

当前的“md-tab-group”实现已经看起来很棒(当标签超出容器宽度等时动态高度,滚动,分页..)但是使用“md-tab-nav-bar”组件这些功能都没有可用。

它已经被分配并且有一个“重要”标签,所以我想这是材料团队认可的。

答案 2 :(得分:0)

在adamport提到的问题的最底部有一个潜在的解决方法。

从解决方法转述(原始信用到daiky00):

<nav mat-tab-nav-bar>
    <mat-tab-group>
        <mat-tab *ngFor="let yourVariable of yourLinks">
             <ng-template mat-tab-label>
                <a  mat-tab-link 
                      [routerLink]="yourVariable.path"
                      [routerLinkActiveOptions]="{exact: true}"
                      routerLinkActive #rla="routerLinkActive">
                {{yourVariable.data['label']}} <!-- or however your links are set up-->
                </a>
            </ng-template>
       </mat-tab>
    </mat-tab-group>
</nav>

答案 3 :(得分:0)

我做了一个非常好的解决方法。您可以使用MatTab的事件'selectedTabChange'使其看起来像链接:

- HTML -

  <mat-tab-group 
  (selectedTabChange)="onLinkClick($event)" 
  [selectedIndex]="selectedTab" 
   mat-stretch-tabs>
   <mat-tab *ngFor="let link of links" label="TabLabel">


   </mat-tab>

  </mat-tab-group>

- MODEL -

export class NavOption{
 routerLink:string;
 title:string;
 constructor(routerLink:string,title:string){
    this.routerLink = routerLink;
    this.title = title;
  }
}

- TS -

import { MatTabChangeEvent } from '@angular/material/tabs';
import { NavOption } from '../model/route.model';

links = Array<NavOption >=[...]

constructor(private router: Router) {}


onLinkClick(event: MatTabChangeEvent) {
  console.log(event);
  let tabTitle = event.tab.textLabel;
  let routerLink = this.navs.find(n => n.title == tabTitle ).routerLink;

   this.router.navigate(['/' + routerLink]);
  }

它运作良好,只有没有入口动画。