我的表单需要访问路由参数和数据。它们是可观察的,所以我需要订阅才能访问它们的值。我的问题是,如何在一个订阅中同时访问它们?
this._route.params.subscribe(
params => {
getData(params['id'], data['id2'] <=== i need data value too. how do i get this???)
});
为什么棱角分裂将它们放在两个独立的可观测量中?
答案 0 :(得分:12)
如何在一次订阅中同时访问它们?
您可以使用ActivatedRoute
中的ActivatedRouteSnapshot
。 ActivatedRouteSnapshot
接口具有params
和queryParams
属性,您可以同时获取这两个值。
请勿尝试直接注射ActivatedRouteSnapshot
。它不会起作用。您必须注入ActivatedRoute
并访问其snapshot
属性。
注意:我们只使用这种技术获得参数的初始值
constructor(private _route: ActivatedRoute) {
console.log(this._route.snapshot.params);
console.log(this._route.snapshot.data);
}
示例Plunker
另一种方式,由于params
和data
为observable
,我们可以使用zip
运算符合并它们,然后在单个订阅中访问它们。但请注意,如果params
或data
中的某个没有值,则不会触发订阅。
this._route.params
.zip(this._route.data)
.subscribe((value) => {
this.id = value[0]["id"]; // get param
this.data = value[1]; // get data value
});
示例Plunker
为什么棱角分裂将它们放在两个独立的可观测量中?
我已阅读文档,你是对的,有单独的可观察对象,但我不知道为什么。
答案 1 :(得分:5)
与迈克尔的回复类似,您可以使用ActivatedRouteSnapshot
中的ActivatedRoute
获取路线data
。
您可以将其置于params
订阅中,即使该路由不包含任何params
,也会触发该订阅。
this.route.params.subscribe((params) => {
console.log(params);
console.log(this.route.snapshot.data);
});