Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将外部JS导入Angular 8_Javascript_Angular - Fatal编程技术网

Javascript 将外部JS导入Angular 8

Javascript 将外部JS导入Angular 8,javascript,angular,Javascript,Angular,我正在Angular 8(8.0.3)中编写应用程序,我需要导入外部JS文件,该文件将保存API的URL引用,该API可以并且将更改。我面临的问题是,在编译Angular应用程序(使用ng build--prod)后,我对该文件所做的更改不会在Angular中拾取,但它会保持应用程序构建时的数据不变 这是外部JS文件: export function apiUrl() { return 'http://www.localhost.local/api/v1/'; } apiUrl()确实

我正在Angular 8(8.0.3)中编写应用程序,我需要导入外部JS文件,该文件将保存API的URL引用,该API可以并且将更改。我面临的问题是,在编译Angular应用程序(使用ng build--prod)后,我对该文件所做的更改不会在Angular中拾取,但它会保持应用程序构建时的数据不变

这是外部JS文件:

export function apiUrl() {
    return 'http://www.localhost.local/api/v1/';
}
apiUrl()
确实返回正确的值,但如果我更改它,更新的值不会反映在Angular应用程序中

我还创建了
.d.ts.
文件:

export declare function apiUrl();
已将外部JS文件导入index.html:

<script type="module" src="assets/js/api_url.js"></script>
我没有在
angular.json
中导入此文件,即使导入,也没有任何更改

那么,如何创建并导入一个外部JS文件,在它更改后,Angular应用程序会接收它的更改

编辑: 请注意,当此文件更改时,我不需要重新加载live app,但我需要在每次Angular app启动时从服务器加载该文件

编辑2:
来解释我为什么需要这个。Angular应用程序将在我无法访问的内部网络上使用。客户端当前不知道API URL,即使他知道,它也可以随时更改。这就是我需要它工作的原因。

在这种情况下,您应该使用

您可以在
src/environments
目录中找到它们

对于本地开发,您有
environment.ts
文件,对于生产
environment.prod.ts

示例
environment.ts

export const environment = {
  production: false,
  apiUrl: 'http://www.localhost.local/api/v1/'
};
export const environment = {
  production: true,
  apiUrl: 'http://www.producitonurl.com/api/v1/'
};
environment.prod.ts

export const environment = {
  production: false,
  apiUrl: 'http://www.localhost.local/api/v1/'
};
export const environment = {
  production: true,
  apiUrl: 'http://www.producitonurl.com/api/v1/'
};
要使用此
apirl
值,您需要将环境文件导入typescript文件,如下所示: 您需要导入
environment.ts
而不是任何其他环境文件,因为angular正在生成应用程序时替换它

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

@Injectable({
  providedIn: 'root'
})
export class MyApiService {
    apiUrl = environment.apiUrl;
}
但是,如果您想使用
中的方法,只需使用
窗口
对象,如下所示:

private api_url: string = (window as any).apiUrl();

ng build不监视文件更改。只有ng发球。如果您在构建后对文件进行更改,您必须重新构建您的项目,我知道这一点,但我需要一个解决方案,该解决方案将拾取此文件和此文件中的更改。这可能吗?谢谢,但这不是我想要的解决方案。我知道环境,但在这种情况下,它们没有用处。您仍然可以使用脚本文件中的方法,通过使用
窗口
范围,但我不确定这个
导出功能
我在回答的最后一句话中提到过:)