【问题标题】:RouteParams in AppComponentAppComponent 中的 RouteParams
【发布时间】:2016-05-08 13:13:40
【问题描述】:

我正在尝试制作一个简单的单组件应用程序来测试 Angular2,但我非常坚持在我的应用程序组件中访问 RouteParams。

这是我目前所拥有的:

@Component({
  selector: 'app',
  template: '<h1>ID: {{id}}</h1>',
  directives: [ROUTER_DIRECTIVES],
  providers: []
})
@RouteConfig([
  { path: '/', component: App }
])
class App {
  private id: string

  constructor(params: RouteParams) {
    this.id = params.get('id')
  }
}

bootstrap(App, [
  ROUTER_PROVIDERS,
])

所以基本上我想要实现的是让用户转到http://website.com/?id=21,然后让网站显示 21。我是否需要为此设置一个单独的组件,然后让我的 AppComponent 提供到该组件的路由或者有什么方法可以访问应用组件中的路由参数?

【问题讨论】:

    标签: javascript routing angular routeparams


    【解决方案1】:

    这可能会做你想做的事

      constructor(private router:Router, private routeSerializer:RouterUrlSerializer, private location:Location) {
        router.changes.first().subscribe(() => {
          let urlTree = this.routeSerializer.parse(location.path());
          console.log('serializer', urlTree.children(urlTree.root)[0].segment);
          // or to get the next segment of the path:
          // console.log('serializer', urlTree.children(urlTree.children(urlTree.root)[0])[0].segment);
        });
      }
    

    【讨论】:

      【解决方案2】:

      这里是如何为路由参数设置 RouteConfig

      {path: '/hero/:id', name: 'HeroDetail', component: HeroDetailComponent},
      

      这是来自已配置应用程序的代码,其中包含路由和路由参数

      @Component({
      selector: 'my-app',
      template: `
      <h1 class="title">Component Router</h1>
      <a [routerLink]="['CrisisCenter']">Crisis Center</a>
      <a [routerLink]="['Heroes']">Heroes</a>
      <router-outlet></router-outlet>
      `,
      directives: [ROUTER_DIRECTIVES]
      })
      @RouteConfig([
      
      { // Crisis Center child route
      path: '/crisis-center/...',
      name: 'CrisisCenter',
      component: CrisisCenterComponent,
      useAsDefault: true
      },
      
      {path: '/heroes',   name: 'Heroes',     component: HeroListComponent},
      {path: '/hero/:id', name: 'HeroDetail', component: HeroDetailComponent},
      {path: '/disaster', name: 'Asteroid', redirectTo: ['CrisisCenter', 'CrisisDetail', {id:3}]}
       ])
          export class AppComponent {
      
      constructor(private router: Router) {
          this.setUpEvents();
      }
      
      private setUpEvents(): void {
          this.router.subscribe((value: any) => this.onNext(value));
      }
      
      private onNext(value: any): void {
        //uncomment to get the stacktrace
        //throw new Exception(""); 
          console.log(value);
      }
      
      }
      

      the plunker for the example

      在完整视图中,您可以看到路由和路由参数如何更改以显示新内容:click here

      【讨论】:

      • 我已经阅读了该示例应用程序,但它并没有做我想做的事情。我只想拥有一个“/”路由,它应该显示我的应用程序组件,但它还应该读取 url 中给出的参数。
      猜你喜欢
      • 2016-11-07
      • 2016-02-07
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2015-11-08
      • 1970-01-01
      相关资源
      最近更新 更多