2016-12-11 11 views
3

私は現在、角度2 tutorialを見ていて、IDを使ってオブジェクトデータを取得するためにパラメータ付きルータを使用する方法を学んでいます。経路パラメータタイプの変換

以下は、私が尋ねる質問に関連して使用されるコードです。ここ

ID

getHero(id: number): Promise<Hero> { 
    return this.getHeroes() 
    .then(heroes => heroes.find(hero => hero.id === id)); 
} 

に基づいてデータを取得するため(サービスクラスからの)ID

 { 
     path:'detail/:id', 
     component:HeroDetailComponent 
     } 

サービス方式に基づいて構成要素に向けるためapp.module.ts内経路定義でありますURLから情報を引き出すために使用されるコンストラクタとOnInitメソッド(データが表示されるhero-details.componentから)

constructor(
private heroService: HeroService, 
private route: ActivatedRoute, 
private location: Location 
){} 

ngOnInit():void{ 
    this.route.params 
    .switchMap((params:Params) => this.heroService.getHero(+params['id']) 
     .subscribe(hero => this.hero = hero)); 
} 

最後に、私たちが取り込んでいるデータの例です。idは型番号と名前型文字列です。

{ id: 11, name: 'Mr. Nice' } 

QUESTION:私たちはthis.heroService.getHero()コールのパラメータの範囲内で数値に文字列からIDを変換ngOnInit+params['id']はどのように変換の面で正確に機能しますか?私が推測したのは、app.module.tsファイル内のルートをレイアウトする方法によるものであり、detail/:idparams['id']と同等ですが、私が将来確実に何をしているかを知るためにはっきりとした説明が必要です。

+0

ルートパラメータは常に文字列であり、このパラメータで何をしたいのかはあなた次第です。有益な答えをいただきありがとうございます。 –

答えて

6

paramsオブジェクトは、経路上で指定したパラメータを保持するために、Angular2ルータによって構築され、移入された構造体です。キー値のペアは、:id(key)と実行時の実際のルート値と一致します。 Paramsは複数のパラメータを保持できます。

あなたが参照しているプラ​​ス(+ params ['id'])は、インタープリタにparam結果をどのような型(文字列)から数値に変換するかを指示する標準javaScript演算子です。

このリファレンスを参照してください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_(.2B)

単項プラス演算子は、オペランドの前に、そのオペランドに評価されますが、それはまだない場合、番号に変換しようとします。

+3  // 3 
+"3" // 3 
+true // 1 
+0

それは私がより良い理解を得るのを助けました。 – rze

関連する問題