Angular2 rc1 - @Routes声明的顺序是否重要(可选参数)?

时间:2016-06-05 14:15:10

标签: angularjs typescript angular angular-ui-router

尝试新的Angular 2.0.0-rc.1而没有被删除的东西。 我希望组件可以使用或不使用path参数。由于我无法弄清楚可选参数的语法(例如。/detail/:id?/detail[/:id]不起作用),我可以选择声明单独的路由。根据我声明@Routes的顺序,我正在点击异常

为什么这样好:

@Routes([
  { component: HeroDetailComponent, path: '/detail/:id' },
  { component: HeroDetailComponent, path: '/detail' }
])

而这不是:

@Routes([
  { component: HeroDetailComponent, path: '/detail' },
  { component: HeroDetailComponent, path: '/detail/:id' }
])

访问参数化网址时:localhost/detail/1我收到异常:

  

EXCEPTION:错误:未捕获(在承诺中):组件   ' HeroDetailComponent'没有路线配置

参考组件类:

import {OnActivate, RouteSegment, Router} from "@angular/router"; 
import {Component, Input} from '@angular/core';
import {Hero} from '../model/hero';
import {HeroService} from "../model/hero.service";

@Component({
  templateUrl: 'hero-detail.component.html',
  selector:    'my-hero-detail'
})

export class HeroDetailComponent implements OnActivate{
  constructor(private heroService: HeroService,
              private router: Router){}
  @Input()
  hero: Hero = new Hero();

  routerOnActivate(curr: RouteSegment) {
    if(curr.getParam('id') == null)
      return;

    let id = +curr.getParam('id');
    this.heroService.get(id)
      .then(hero => this.hero = hero);
  }
}

1 个答案:

答案 0 :(得分:1)

是的,订单很重要。应该首先采用更具体的路线,而不是具体路线。

这不是故意的,而是对当前@angular/router的限制。

目前尚不清楚他们将如何推进路由器。如果您刚刚开始从@angular/router-deprecated迁移,那么最好等到路由器策略明确。