Angular 2中的RouteData可以将变量传递给来自父组件的路由组件吗?

时间:2016-03-20 00:06:25

标签: typescript angular angular2-routing

我想使用RouteConfig将变量从我的AppComponent传递给Coursescomponent,但是路由配置中的“data”属性只能传递常量参数,并且它无法识别“this”。有没有办法做到这一点?

如果没有,将变量传递给路由组件的最佳做法是什么?

@Component({
    selector: 'app',
    template: `
    <router-outlet></router-outlet>
    `,

directives: [ROUTER_DIRECTIVES],
})

@RouteConfig([
    { path: '/courses'
      , name: 'Courses' 
      ,component: CoursesComponent
       ,data:{token:this.token}}  // this doesn't work -- cannot read property "token" of undefined

])

export class AppComponent  {
    token:string;
//I would change the token(string) in this component, and I want to pass this to the routed components

}

2 个答案:

答案 0 :(得分:1)

我通过在构造函数中定义动态路由来实现此目的。这是一个例子

import {Router,ROUTER_DIRECTIVES} from 'angular2/router';
import {Component} from 'angular2/core';

@Component({
  selector: "app",
  template: '<router-outlet></router-outlet>',
  directives: [ROUTER_DIRECTIVES]
})
export class AppCmp{
  public token:string;
  constructor(private _router:Router){
    var config = [];
    if(!this._router.registry.hasRoute("Courses",AppCmp))
      config.push({ path: '/courses', name: 'Courses',component: CoursesComponent,data:{token:this.token});

    this._router.config(config)
  }
}

答案 1 :(得分:0)

您可以使用共享服务在组件之间共享值。

有关如何实施共享服务的详细信息,请参阅Global Events in Angular 2

或者,您可以注入Router并调用其中一个router.navigateXxx()函数,然后传递其他数据。