2017-08-04 1 views
0

いくつかの助けが必要です。単純な作業をしたいだけです。app.component.tsから変数をapp.module.tsに経路で渡します。変数を経路設定に渡す

const pmRoutes: Routes = [ 
    { path: '', redirectTo: someId+'/some-other-component', pathMatch: 'full' }  
]; 
:私はこのsomeIdを取得するなどapp.module.tsにそれを渡すようにしようとしています

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

:のように私はサービスから何らかの値を取得していますapp.component.tsで

ありがとうございます。

答えて

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']); 
} 

角度は、このルートはあなたが提供してきたものと一致することを確認し、対応するコンポーネントをロードします。

EDIT

これはガードがどのように見えるべきかです:

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']; 
 
     }); 
 
    } 
 
}

+0

あなたの答えをいただき、ありがとうございます。 しかし、私はデフォルトルートを次のようなものにしたいので、実際にはこれは私にとってはうまくいかないでしょう:127.0.0.1/somevalueそしてこの値は、クリックしていないロード時のサービスから来ています。 –

+0

その場合、 'someId'の値があなたのAPIで提供されている値と等しいかどうかをチェックするガードとともに、上記のソリューションを使用したいかもしれません。何かのように: '{path: ''、redirectTo: '{someId}/some-other-component'、pathMatch: 'full'、canActivate:CheckValueGuard}' –

+0

yeap、私はcanActivateで試しましたが、あなたは私に例を挙げてください? –

関連する問題