Угловой 7 с конфигурацией ng2-stompjs - PullRequest
0 голосов
/ 21 февраля 2019

Я следовал учебному пособию под веб-страницей: https://stomp -js.github.io / guide / ng2-stompjs / 2018/11/04 / ng2-stomp-with-angular7.html .

Все работало замечательно, пока я не получил часть, где мне нужно было перенести всю конфигурацию приложения, включая URL-адрес веб-сокета.С моим недостаточным знанием Angular мне довольно трудно этого добиться.Проблема в том, что в учебнике он жестко задан:

export const myRxStompConfig: InjectableRxStompConfig = {
// Which server?
brokerURL: 'ws://127.0.0.1:15674/ws',

, и я подготовил этот класс для получения URL-адресов API:

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

@Injectable({
  providedIn: 'root'
})
export class AppConfig {

  private config: object = null;
  private env: object = null;

  constructor(private http: HttpClient) {}

  public getConfig(key: any) {
    return this.config[key];
  }

  public getEnv(key: any) {
    return this.env[key];
  }

  getConfigs(): Promise<Object> {
    return new Promise((resolve, reject) => {
    this.http.get('assets/config/env.json').subscribe((envResponse: any) 
=> {
    this.env = envResponse;
    let request: any = null;
    switch (envResponse.env) {
      case 'production':
      {
        request = this.http.get(
          'assets/config/api.' + this.getEnv('env') + '.json'
        );
      }
        break;

      case 'development':
      {
        request = this.http.get(
          'assets/config/api.' + this.getEnv('env') + '.json'
        );
      }
        break;

      case 'default':
      {
        console.error('Environment file is not set or invalid');
        resolve(true);
      }
        break;
    }
    if (request) {
      request.subscribe(responseData => {
        this.config = responseData;
        resolve(true);
      });
    } else {
      console.error('Env config file "env.json" is not valid');
      resolve(true);
    }
  });
});
}
}

Я пытался что-то вроде этого:

export class Stomp {

public static brokerURL = null;
public static heartbeatIncoming: 0; // Typical value 0 - disabled
public static heartbeatOutgoing: 0; // Typical value 20000 - every 20 seconds
public static reconnectDelay: 5000;

constructor(private appConfig: AppConfig) {
  Stomp.brokerURL = this.appConfig.getConfig('openbatonWS') + '/websocketRD/websocket';

}

Но не повезло.Можете ли вы указать мне в правильном направлении.Как я могу добиться, чтобы вывести brokerURL в InjectableRxStompConfig.

Спасибо, Urban

1 Ответ

0 голосов
/ 22 февраля 2019

Полагаю, мне надоело видеть очевидное, поэтому я отправлю ответ на мои вопросы.Я должен был поместить это в ngModule:

    {
      provide: InjectableRxStompConfig,
      useClass: Stomp,
      deps: [AppConfig]
    },

И использовать класс записи Stomp как этот:

import {AppConfig} from "./app.config";

export class Stomp {

  public brokerURL = null;
  public heartbeatIncoming: 0; // Typical value 0 - disabled
  public heartbeatOutgoing: 0; // Typical value 20000 - every 20 seconds
  public reconnectDelay: 5000;

  constructor(private appConfig: AppConfig) {
    this.brokerURL = this.appConfig.getConfig('openbatonWS') + '/websocketRD/websocket';
  }
}
...