如何从服务获取URL参数

时间:2019-06-27 14:20:54

标签: angular angular7

我正在尝试在服务中获取路由paramMap,但是订阅返回null。但是,如果我订阅该组件,则返回值。

为什么?

我在服务中有此代码

this.route.paramMap.subscribe(params => console.log(params.get('param')));

我的路径是:

{path: 'home/:param', loadChildren: './components/home/home.module#HomeModule'}

编辑

好的解决方案: Angular 2.0.2: ActivatedRoute is empty in a Service

5 个答案:

答案 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中搜索参数,并且我没有在测试中使用该查询字符串,并且它始终会找到我的参数。

希望这会有所帮助。