You can load resource based on the url using the a combination of ActivatedRouteand Angular 2’s Http service. Since the params and Http are both streams, you can use RxJS to get the data off the param then switchMap over to an Http request using that data.

Hero.component.ts:

import { Component, OnInit } from '@angular/core';
import {ActivatedRoute} from "@angular/router";
import {StarWarsService} from "../heros.service";
import {Observable} from "rxjs"; @Component({
selector: 'app-hero',
templateUrl: 'hero.component.html',
styleUrls: ['hero.component.css']
})
export class HeroComponent implements OnInit { hero: Observable<Object>;
constructor(private router: ActivatedRoute, private starwarService: StarWarsService) {
this.hero = router.params.map((p:any) => p.id)
.switchMap( id => this.starwarService.getPersonDetail(id))
.startWith({
name: 'Loading...',
image: ''
})
} ngOnInit() {
} }

hero.component.html:

<div>
<h2>{{(hero | async)?.name}}</h2>
<img [src]="(hero | async)?.image" [alt]="(hero | async)?.name"> <!--
Notice that, here we use ? mark. This is not necessary if we use 'startWith({name: '', image: ''})'
startWith will set init value, so that hero.name / hero.image won't be undefined
-->
</div>

heros.service.ts:

import {Injectable, Inject} from '@angular/core';
import {STARWARS_BASE_URL} from "../shared/constance.service";
import {Http} from "@angular/http";
import "rxjs/add/operator/map";
import "rxjs/add/operator/switchMap"; @Injectable()
export class StarWarsService { constructor(@Inject(STARWARS_BASE_URL) private starwarUrl,
private http: Http
) {} getPeople(){
return this.http.get(`${this.starwarUrl}/people`)
.map( res => res.json())
} getPersonDetail(id){
return this.http.get(`${this.starwarUrl}/people/${id}`)
.map( res => res.json())
.map( (hero:any) => Object.assign({}, hero, {
image: `${this.starwarUrl}/${hero.image}`
}))
}
}

Github

最新文章

  1. CF#138 div 1 A. Bracket Sequence
  2. python的__future__特性
  3. 深入理解.NET程序的原理 谈一谈破解.NET软件的工具和方法
  4. CI框架分页类代码
  5. uva 11825
  6. mongoDB知识总结
  7. java concurrent 之 SynchronousQueue
  8. 开涛spring3(2.3) - IoC的配置使用
  9. 浏览器出现Cannot set property &#39;onclick&#39; of null的问题
  10. mybatis一对多查询之collection的用法
  11. 列表推导式和sum的用法
  12. zabbix 应用监控作业笔记 ansible-playbook
  13. centos7系统排错
  14. PXE:kickstart配置文件:全自动安装centos、redhat 系统的配置
  15. postgre
  16. php url链接地址传数组方法 json_decode解析数组失败 经过url链接的json数组解析出错的解决方法 (原)
  17. JVM调优原理
  18. Android Camera后台拍照
  19. Ulua_toLua_基本案例(六)_LuaCoroutine2
  20. kubernetes1.9管中窥豹-CRD概念、使用场景及实例

热门文章

  1. memset()实现及细节
  2. 动态创建二维vector数组 C和C++ 及指针与引用的区别
  3. 在IT网站上少花些时间
  4. 新 esb-cs-tool.jar 参数说明
  5. 思科ASA系列防火墙配置手册
  6. Linux下如何用vi编辑和保存文件
  7. Map排序——按key排序,按value排序
  8. 妙用缓存调用链实现JS方法的重载
  9. js 浮点小数计算精度问题 parseFloat 精度问题
  10. linux如何安装MyEclipse 2014