Угловой 5: Запустите конструктор, прежде чем вводить его

У меня есть файл с глобальными переменными:

@Injectable()
export class Globals {
  public baseURL:string;
  public loginURL:string;
  public proxyURL:string;
  public servicesURL:string;

  constructor(platformLocation: PlatformLocation) {
    this.baseURL = (platformLocation as any).location.href;
    this.loginURL = this.baseURL + 'rest/login';
    this.proxyURL = this.baseURL + 'rest/proxy';
    this.servicesURL = this.baseURL + 'rest/serviceRegistry';
  }
}

В данный момент мои API-вызовы не работают, потому что переменные еще не установлены. Есть ли способ внедрить этот сервис только при запуске конструктора или мне нужно использовать Observables?

2 ответа

Решение

Сам по себе не решил. Я использую это так сейчас:

@Injectable()
export class Globals {
  /** API URLS */
  public baseURL:string = '';
  public loginURL:string = 'rest/login';
  public proxyURL:string = 'rest/proxy';
  public servicesURL:string = 'rest/serviceRegistry';
}

Почему бы вам не сохранить их в environment.ts? Вы также можете сохранить различные среды для prod, dev и т.п.

export const environment = {
  production: false,
  envName: 'local',
  baseUrl: '',
  proxyUrl: '',
  servicesUrl: ''
};

И к вашим услугам:

import { Injectable } from '@angular/core';
import { environment } from '../../environments/environment';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class MyService {

  constructor(private http: HttpClient) { }

  getData() {
    return this.http.get(`${environment.server}/remaining/path`)
  }

}
Другие вопросы по тегам