Могу ли я получить значение параметра --base-href в моем коде при создании проекта Angular? - PullRequest
0 голосов
/ 28 июня 2019

Для моего проекта Angular у меня есть несколько сред, каждая для определенного этапа DTAP .При создании этого проекта Angular я установил флаг --base-href для соответствующего базового URL.Тем не менее, у меня также есть URL-адрес, установленный в моем коде, который принадлежит второму веб-серверу, чтобы соответствовать.Этот веб-сервер также имеет несколько этапов DTAP.Итак, я хотел бы иметь возможность «знать» в своем коде, какое значение флага --base-url установлено, чтобы можно было установить переменную для соответствующего URL-адреса второго веб-сервера.

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

Идея состоит в том, чтобы иметь следующий код:

    let url;
    if (base-href.contains('test'))
        url = 'https://test.com';
    else if (base-href.contains('acceptance'))
        url = 'https://acceptance.com'
    else if (base-href.contains('deployment'))
        url = 'https://deployment.com'

    // Send API call to URL

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

Если кто-нибудь может указать мне правильное направление для достижения этого, что будетс благодарностью!

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

В конце концов, решение этого вопроса действительно простое и не обязательно связано с --base-href.

Я решил эту проблему не путем поиска --base-href при сборке Angularпроект, но, посмотрев на URL, когда приложение уже работает:

public static url: string = location.href.indexOf('test') > -1             // Test environment
                             || location.href.indexOf('localhost') > -1    // Local environment
                            ? 'https://test.com'
                            : location.href.indexOf('staging') > -1        // Staging environment
                            ? 'https://staging.com'
                            : location.href.indexOf('demo') > -1           // Demo environment
                            ? 'https://demo.com'
                            : 'https://deployment.com';                    // Deployment environment

Поскольку эти URL будут статическими и не изменится, я уверен, что этих настроек будет достаточно, чтобы увидеть, какой URL должен бытьб.

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

Вы можете добавить еще одну переменную к вашему environment.ts. при компиляции это значение будет установлено для каждой среды, что позволит ссылаться на эту переменную в вашем коде.

export const environment = {
  production: true,
  host: 'test'
};

в вашем компоненте:

import { environment } from '../environments/environment';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  constructor() {}

  ngOnInit() {
    if (environment.host == 'test') {
      // whaever
    }
  }

}
  • также следует помнить, что использование среды - это на самом деле не то, что вы хотите делать, потому что это означает, что код, который выполняется в e среде A , не является тем же, что выполняется в среде B * 1012. * когда вы компилируете для среды.

лучшим подходом было бы вызвать HTTP-запрос при загрузке приложения, чтобы получить простую запись файла json / db, хранящую эти настройки на сервере. Таким образом, вы можете скопировать и вставить проверенный тестовый код прямо в производство, за исключением файла json, и он просто работает.

подробнее на: Статья Дэйва М. Буша - где хранить угловые конфигурации

...