2016-12-11 61 views
3

我目前正在通過Angular 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' } 

問:在我們轉換ID從字符串到this.heroService.getHero()調用的參數內大量ngOnInit+params['id']在轉換方面的工作原理如何?我的猜測是,這是由於我們在app.module.ts文件中佈局路線,而detail/:id等於params['id'],但我希望有一個明確的解釋,以便我知道將來我在做什麼以確定性。謝謝

+0

路由參數總是字符串,這取決於你想要用這個參數做什麼。 –

回答

6

params對象是一個由Angular2路由器構建和填充的構造,用於保存您在路由上指定的參數。鍵值對在運行時匹配:id(key)和實際路由值。參數可以保存多個參數。

您所指的plus(+ params ['id'])是一個標準的javaScript運算符,它告訴解釋器將param結果從它是(string)的任何類型轉換爲數字。

看到這個參考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_(.2B)

的一元加運算先於其操作數,並計算其操作數,而是試圖把它轉換成一個數字,如果沒有的話。

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

感謝您提供豐富的答案。它幫助我獲得了更好的理解。 – rze