2017-03-10 10 views
0

私は、アクティブ化されたルートのid urlパラメータに加入しているコンポーネントを作成しようとしています。このコンポーネントを使用して、idを持つサーバにhttpリクエストを行う私のサービスを呼び出します。サービスのサブスクリプションにURLパラメータのサブスクリプションをチェーンする方法はありますか。

が、私はそうのようなIDにかかるルート持っている - /記事/ビュー/

1005は以前、私がURLパラメータに加入していなかった、と私は一度だけのURLからIDをつかんました。

これは、クラスのコードだった:

ngOnInit() { 
    var id = +this.activatedRoute.snapshot.params["id"]; 

    if (id) { 
     this.articleService.get(id).subscribe(
      article => this.article = article 
     ); 
    } 
    else if (id === 0) { 
     console.log("id is 0: switching to edit mode..."); 
     this.router.navigate(["article/edit", 0]); 
    } 
    else { 
     console.log("Invalid id: routing back to home..."); 
     this.router.navigate([""]); 
    } 
} 
しかし、私は同じ部品が毎回とngOnInitフック繰り返しになく、異なるIDでルーティングすることができる状況に遭遇している

だけ発射されます初めて。ですから、その問題に対処するために、urlパラメータのidに購読したいと思います。

解決策を見つけようとしましたが、フラットマップが使いたいと思っています。しかし、私は私の記事のサービスへの加入にこの

this.activatedRoute.params.subscribe((params: Params) => { 
     id = params['id']; 
     console.log(params); 
    }) 

のようなURLパラメータへのサブスクリプションをリンクする方法を示して良い情報源を見つけることができません。

+0

他のコンポーネント用に取得されたデータは子コンポーネントですか? – Aravind

+0

いいえ、この例では1つのコンポーネントしかありません。子コンポーネントはありません。 – LayfieldK

答えて

0

あなたはあなたののOnInitで

export const appRoutes: Routes = [ 
    ... 
    { 
    path: 'path1/:id', 
    component: YourComponent, 
    resolve: { 
     someObject: ComponentResolve 
    } 
    } 
]; 

@Injectable() 
export class ComponentResolve implements Resolve<Interface> { 

    constructor(private yourService: YourService) {} 

    resolve(route: ActivatedRouteSnapshot) { 
    return this.yourService.getMethod(route.params['id']); 
    } 

以下のようにルート決意を使用して行うことができます()属性SomeObjectのとルートデータをサブスクライブします。

関連する問題