我正在尝试在服务中获取路由paramMap,但是订阅返回null。但是,如果我订阅该组件,则返回值。
为什么?
我在服务中有此代码
this.route.paramMap.subscribe(params => console.log(params.get('param')));
我的路径是:
{path: 'home/:param', loadChildren: './components/home/home.module#HomeModule'}
编辑
答案 0 :(得分:1)
Why?
问题在于服务会在应用程序启动时初始化,然后在需要时注入到任何组件中。这些组件是根据路由更改进行初始化的,因此,我建议您订阅组件中的路由更改。
Workaround:
但是,如果您想获取服务中的参数,可以看看this answer。
要么
另一种选择是将数据从组件传递到ngOnInit()
希望有帮助!
答案 1 :(得分:0)
我这样使用它:通过@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
函数在setParams
上设置属性
myservice
答案 2 :(得分:0)
您无法从服务中获取路由参数。实际上,这里描述了该问题:https://github.com/angular/angular/issues/11023
如果要在服务中使用参数,则应从组件提供ActivatedRoute
到服务中。
答案 3 :(得分:0)
ActivatedRoute
仅在目标组件中使用时才返回参数。我假设您正在尝试使用服务中的ActivatedRoute
来检索参数。为此,您需要将ActivatedRoute
从组件传递到您的服务,然后使用传递的值订阅参数。
答案 4 :(得分:0)
我不确定在该状态以上的答案,无法以不同于组件的方式读取ActivatedRoute。我正在使用此类(甚至不是Service,只是一个使用Angular DI的原始类),并且可以正常工作。的确,在使用ActivatedRoute之前必须先将其激活,但这很简单。这是我的代码,用于在ActivatedRoute中找到最后一个孩子,并且向您保证它会起作用:
loadTile(at path:result:)
在该代码中,我从路径和查询字符串中都在url中搜索参数,并且我没有在测试中使用该查询字符串,并且它始终会找到我的参数。
希望这会有所帮助。