将变量传递给路由配置

时间:2017-08-04 14:04:05

标签: angular angular2-routing

需要一些帮助,我只想做一个简单的任务:将变量从app.component.ts传递到路径中的app.module.ts。

在app.component.ts中,我从服务中获得了一些价值,如:

  ngOnInit(){
    this.subsc = this.someService.someMethod().subscribe(
      (someId: any[]) => {
        console.log(someId);
      },
      (error) => {
        console.log("some error");
      }
    ); 
  }

我想把它变成someId并传递给app.module.ts,如:

const pmRoutes: Routes = [ 
  { path: '', redirectTo: someId+'/some-other-component', pathMatch: 'full' }     
];

谢谢。

1 个答案:

答案 0 :(得分:0)

不可能按照你的描述做。在Angular中,您需要创建与给定模式匹配的路径。如果你需要一个id,那么这就是你必须拥有的方法:

{ path: '', redirectTo: '{someId}/some-other-component', pathMatch: 'full' }

然后处理组件中someId的值。例如,假设您希望在用户单击按钮时导航到该路径。然后,使用(click)方法:

constructor(protected router: Router) {}

onClick(id) {
    this.router.navigate([id, 'some-other-component']);
}

然后Angular将看到此路线与您提供的路线相匹配并加载相应的组件。

修改

警卫应该是这样的:



import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
import { Observable } from "rxjs/Observable";
import { ServiceToFetchTheRouteValue } from 'somewhere';

@Injectable() export class RouteGuard implements CanActivate {
    constructor(private service: ServiceToFetchTheRouteValue) { }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): any {
        // assuming you get your value asynchronously and getValue() returns an Observable
        return this.service.getValue().map((value: any) => {
            // + is to convert the value to number;
            return value === +route.params['someId'];
        });
    }
}