Вы не можете изменить значение окружения прямо в коде, потому что оно связано со всем остальным. Это также действительно плохой подход, потому что вы будете перезаписывать значение каждый раз, когда обновляете приложение. Сохраните его отдельно на стороне сервера!
Вариант A:
Используйте APP_INITIALIZER и перезапишите значение среды там после его загрузки: environment.api.host = loadedValue
Это будет работать правильно, только если вы не используете значение до этого. Он будет использоваться до этого, только если вы используете его в определениях / конфигурации модулей и классах, которые вы вводите в инициализатор. Так что это может сработать для вас.
Вариант B
Это довольно некрасиво, но сработает нормально:
Сохраните URL-адрес api в отдельном javascript, который выглядит примерно так:
window.userEnvironment = { host: "http://custom-host" };
Загрузите этот javascript в <head>
часть index.html
с помощью: <script src="user-env.js"></script>
. Таким образом, будет загружено до того, как angular будет загружено. Это обеспечивается браузером!
Теперь внутри файла environment.ts
вы можете сделать следующее:
export const environment = {
...
};
const userEnv = (window as any).userEnvironment;
if (userEnv) Object.assign(environment, userEnv);
Это заменяет значение environemt значениями из файла user-env.js
.
Вам не нужно делать это в среде. Вы также можете сделать это где-нибудь еще. Вам просто нужно сделать это до того, как будет использовано environment
. Кроме того, если у вас несколько сред, вам понадобится это во всех файлах среды.