Как получить параметры URL из сервиса - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь получить маршрут paramMap в моем сервисе, но подписка возвращает ноль. Но если я подписываюсь в компоненте возвращает значение.

почему ??

У меня есть этот код в сервисе

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

и мой путь:

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

EDIT

Хорошее решение: Angular 2.0.2: ActivatedRoute пуст в Сервисе

Ответы [ 4 ]

1 голос
/ 27 июня 2019

Why?

Проблема в том, что сервисы инициализируются при запуске приложения, а затем внедряются в любой компонент, когда это необходимо. Компоненты инициализируются на основе изменений маршрута, поэтому я бы предложил подписаться на изменения маршрута в компонентах.

Workaround:

Однако вы можете взглянуть на этот ответ , если хотите получить параметры в службе. ИЛИ ЖЕ Другой вариант - передать данные из компонента в службу по номеру ngOnInit()

.

Надеюсь, это поможет!

0 голосов
/ 27 июня 2019

ActivatedRoute вернет параметры только тогда, когда он используется в целевом компоненте. Я предполагаю, что вы пытаетесь получить параметры, используя ActivatedRoute в сервисе. Для этого вам нужно будет передать ActivatedRoute вашему сервису из вашего компонента, а затем подписаться на параметры, используя переданное значение.

0 голосов
/ 27 июня 2019

Вы не можете получить параметры маршрута из сервиса. Проблема описана здесь, на самом деле: https://github.com/angular/angular/issues/11023

Если вы хотите получить параметры в сервисе, вы должны предоставить ActivatedRoute из компонента в сервис.

0 голосов
/ 27 июня 2019

Я использую это так: с функцией setParams для установки свойства на myservice

import { ActivatedRoute } from '@angular/router';


constructor(private route: ActivatedRoute, private myservice:MyService) {

    this.route.paramMap.subscribe(params => {

       console.log(params.id)

       this.myservice.setParams(params);

     });

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...