Как получить доступ к идентификатору маршрута в службе данных - PullRequest
0 голосов
/ 01 апреля 2019

Как я могу получить доступ к localhost:4200/id в службе данных, чтобы получить его внутри какой-нибудь ссылки JSON?

Я имею в виду, когда я на локальном хосте: 4200/001 Я хочу получить JSON zzz.com/001/summary

Попробовал так, но в консоли появляется, что у меня есть zzz.com/undefined/summary

const routes: Routes = [
  { path: ':id', component: AppComponent },
];

import { HttpClient } from '@angular/common/http';
import { Injectable, OnInit } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class DataService implements OnInit{
  baseUrl = 'https://zzz.com/';
  id :string;
  constructor(private httpClient: HttpClient, private route: ActivatedRoute) { }

  ngOnInit() {
    this.route.params.subscribe((params: Params) => {
      const prodId = params['id'];
      this.id = `${prodId}`;

   })
  }
  mainData() {

    return this.httpClient.get<Header[]>(this.baseUrl + this.id + '/summary');
  }
}

Мне удалось сделать это с: this.id = this.activeRoute.snapshot ['_ routerState']. url и установка таймаута внутри onInit на 1 мс. Когда я звонил.

1 Ответ

0 голосов
/ 01 апреля 2019

Вы должны передавать params / id в сервис из компонента, который его вызывает, таким образом, у вас будет последний id для вызова сервиса.

В угловом запросе параметры (например: "/ app? Param1 = hallo & param2 = 123") доступны путем подписки на this.route.queryParams.

EX:

param1: string;
param2: string;
constructor(private route: ActivatedRoute) {
    console.log('Called Constructor');
    this.route.queryParams.subscribe(params => {
        this.param1 = params['param1'];
        this.param2 = params['param2'];
    });
}

переменные пути доступны через this.route.snapshot.params

Пример: "/ param1 /: query1 / param2 /: query2"

query1: string;
query2: string;
constructor(private route: ActivatedRoute) {
    this.param1 = this.route.snapshot.params.query1;
    this.param2 = this.route.snapshot.params.query2;
}

Измените mainData(), чтобы принять параметр:

mainData(paramId: string) {
        return this.httpClient.get<Header[]>(this.baseUrl + paramId + '/summary');
  }

Теперь используйте ваш компонент для доступа к параметрам маршрута и получения идентификатора для вызова службы.

this.dataService.mainData('123xx').subscribe.(data => {
      // ..... do something...
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...