Angular параметры маршрута в обслуживании - PullRequest
0 голосов
/ 06 августа 2020

Мне нужно получить параметр маршрута в моем сервисе

import {Inject, Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs';
import {ActivatedRoute, NavigationEnd, Router} from '@angular/router';

@Injectable({
  providedIn: 'any'
})
export class LocationService {

  constructor(
    private router: Router,
    private route: ActivatedRoute
  ) {
    console.log('ddd ', );

    this.router.events.subscribe((data) => {
      if (data instanceof NavigationEnd) {
        console.log('this.route.snapshot.params[\'city\']; ', this.route.firstChild.snapshot.params['city']);
      }
    });
  }
}

в компоненте, который

this.router.events.subscribe((data) => {
  if (data instanceof NavigationEnd) {
    console.log('this.route.snapshot.params[\'city\']; ', this.route.firstChild.snapshot.params['city']);
  }
});

работает правильно, но в сервисе city не определен

Если я предоставляю службу определения местоположения в компоненте

@Component({
  selector: 'app-city-chooser',
  templateUrl: './city-chooser.component.html',
  styleUrls: ['./city-chooser.component.scss'],
  providers: [LocationSerivce]
})

, моя служба вызывает дважды (я использую свою службу в другом компоненте)

Как получить параметры маршрута в моей службе?

UPD: в проекте два модуля !!! BasicModule и DashboardModule

1 Ответ

1 голос
/ 06 августа 2020

Вы можете передавать параметры в метод службы и делать все, что захотите, получение параметров маршрута внутри службы - не лучший подход, мы должны этого избегать.

export class LocationService {
 constructor() {}
 
 doSomething(param) {
  // write your logic here
  console.log(param)
 }

В компоненте

constructor(private route: ActivatedRoute, private service: LocationService) {
   const params = this.route.snapshot.params['city'];
   this.service.doSomething(params)
}

Надеюсь, это сработает.

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