[Angular2 Router] Load Data Based on Angular 2 Route Params
2024-10-19 01:26:18
You can load resource based on the url using the a combination of ActivatedRoute
and 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}`
}))
}
}
最新文章
- CF#138 div 1 A. Bracket Sequence
- python的__future__特性
- 深入理解.NET程序的原理 谈一谈破解.NET软件的工具和方法
- CI框架分页类代码
- uva 11825
- mongoDB知识总结
- java concurrent 之 SynchronousQueue
- 开涛spring3(2.3) - IoC的配置使用
- 浏览器出现Cannot set property &#39;onclick&#39; of null的问题
- mybatis一对多查询之collection的用法
- 列表推导式和sum的用法
- zabbix 应用监控作业笔记 ansible-playbook
- centos7系统排错
- PXE:kickstart配置文件:全自动安装centos、redhat 系统的配置
- postgre
- php url链接地址传数组方法 json_decode解析数组失败 经过url链接的json数组解析出错的解决方法 (原)
- JVM调优原理
- Android Camera后台拍照
- Ulua_toLua_基本案例(六)_LuaCoroutine2
- kubernetes1.9管中窥豹-CRD概念、使用场景及实例