Javascript 将外部JS导入Angular 8
我正在Angular 8(8.0.3)中编写应用程序,我需要导入外部JS文件,该文件将保存API的URL引用,该API可以并且将更改。我面临的问题是,在编译Angular应用程序(使用ng build--prod)后,我对该文件所做的更改不会在Angular中拾取,但它会保持应用程序构建时的数据不变 这是外部JS文件: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()确实
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发球。如果您在构建后对文件进行更改,您必须重新构建您的项目,我知道这一点,但我需要一个解决方案,该解决方案将拾取此文件和此文件中的更改。这可能吗?谢谢,但这不是我想要的解决方案。我知道环境,但在这种情况下,它们没有用处。您仍然可以使用脚本文件中的方法,通过使用
窗口
范围,但我不确定这个导出功能
我在回答的最后一句话中提到过:)