Angular2路由器V3和菜单选择

时间:2016-06-27 02:27:18

标签: angular router angular2-changedetection

我希望我的菜单通过在当前路线上的menuItem(如Ng1)中应用'active'类来显示当前路径。

@Component({
  moduleId: module.id,
  selector: 'main-menu',
  directives: [
    ROUTER_DIRECTIVES,
  ],
  template: '
<paper-button #menu1 [data]="['/app/collection']" [routerLink]="['/app/collection']" [ngClass]="{active: isActive(menu1.data)}">My Collection</paper-button>
<paper-button #menu2 [data]="['/app/book/find']" [routerLink]="['/app/book/find']" [ngClass]="{active: isActive(menu2.data)}">Browse Books</paper-button>'
})
export class MainMenuComponent {

  public current:string;

  constructor(public router:Router, private changeDetector:ChangeDetectorRef) {
    this.router.events.subscribe((e)=> {
      this.current = e.url;
    });
  }

  ngOnInit() {
    this.changeDetector.detectChanges();
  }

  isActive(data) {
    if (data) {
      return this.current == data[0];
    }
  }
}

所以这有效,但有两个问题我想帮助解决:

1)我需要调用this.changeDetector.detectChanges();否则活动类不会在页面的初始加载时应用。(我不明白为什么这不是开箱即用的工作......)

2)关于模板,我还没有找到一种不在routerLink中重复我自己的方法。我希望能够将ref传递给我的数据,例如menu2.data,但它不起作用......

感谢任何帮助/建议

1 个答案:

答案 0 :(得分:2)

在新路由器中,您可以定义当路由处于活动状态时应将哪个类添加到routerLink

<a [routerLink]="['/app/collection']" [routerLinkActive]="['active']">Home</a>