【发布时间】:2017-12-14 17:47:15
【问题描述】:
我正在尝试从 URL 中获取 uuid(看起来像 https://something.com/card?id=uuid 所在的位置),然后使用该 uuid 获取 http get 请求。
现在我的 app.component.ts 看起来像:
private cardUuid: string;
constructor(private service: AppService,
private route: ActivatedRoute){
let sub = this.route.params.subscribe((params: Params) => {
this.cardUuid = params['id'];
console.log(this.cardUuid)
})
}
ngOnInit(){
this.service.browserUuid = 'http://address/cards?uuid=' + this.sub.cardUuid;
console.log(this.sub.cardUuid)
}
我的控制台日志返回为未定义。我想知道为什么会这样?是获取uuid的方法不对还是调用时机不对?
任何帮助/提示/建议将不胜感激。
更新: 在@Alexander Staroselsky 的建议下,我重组了从 angular.io 文档的 url 调用 uuid 的方法。
app.component.ts:
card: Card = {};
ngOnInit() {
this.route.paramMap
.switchMap((params: ParamMap) =>
this.service.fetchCardUuid(+params.get('id')))
.subscribe(
card => {
this.card = card;
this.getVenueUuid(this.card);
});
}
应用服务.ts:
public UuidUrl = 'http://websiteaddress/cards?uuid='
constructor(private http: Http){}
private extractData(res:Response) {
let body = res.json();
return body || [];
}
fetchCardUuid(id: number) {
return this.http.get(this.UuidUrl + id)
.map(this.extractData)
}
但是,我仍然无法使用从 Url 获取的 Uuid 正确加载应用程序。在控制台网络中显示 card?uuid=0 的获取请求。再次感谢任何帮助。
【问题讨论】:
-
网址格式
http://address/cards?uuid=使用的是queryParams,而不是params。您需要使用this.route.queryParamMap而不是this.route.paramMap。paramMap根据 url 的设置方式,其中不会包含任何值。 -
这成功了!我相信您现在已经知道,我对 queryParam 与 param 的理解至少可以说是缺乏的。对此表示歉意。但这现在是从 URL 中提取 id。谢谢!
-
请将解决方案作为答案发布,而不是作为问题的更新。这是为了避免混淆。谢谢。
-
这个answer 很好地描述了
params与queryParams在一般RESTful API 应用程序的上下文中。我的原始答案引用了 queryParams。很高兴听到它成功了!请标记帮助您实现解决方案的答案。
标签: angular