在 AngularJS 中动态重新加载配置的 JSON

Posted

技术标签:

【中文标题】在 AngularJS 中动态重新加载配置的 JSON【英文标题】:Reload dynamically JSON of configuration in AngularJS 【发布时间】:2018-07-04 14:10:11 【问题描述】:

是否可以动态重新加载我的项目的配置?

现在配置文件被 NPM build 缩小了,编辑一个缩小的文件并不容易。

我的配置在appConfig.js 中,其中包含如下代码:

const appConf = 
    BASE_URL: 'http://demo:1817',
    API_BASE_URL: 'http://demo:1817/api'    
;

export default appConf;

在我的index.js 中有这样的代码:

import appConf from "./appConf";

angular.module('app', [])
    .constant('appConf', appConf)
    .run(function()
        //do something
    );

在我的服务中,我使用这样的配置:

$http.get(appConf.API_BASE_URL + "/something").then(resp =>  
            //do someelse
        );

我想在不运行 NPM 构建的情况下使用 API 的新 URL 编辑 appConfig.js

我想这样做是因为在演示环境中 URL 会经常更改。

【问题讨论】:

【参考方案1】:

在angular2中编辑最小化文件非常困难,不推荐。 获取基本 url 并使用它而不是保存在配置中。请尝试以下任何一种。 下面是Angular2的代码

在服务中添加以下方法

hostUrl() 
      var hostName = window.location.origin;
      return hostName + '/';
  

在 ts 文件中使用如下

this.http.get(this.service.hostUrl() + "/something" 
    //do someelse
    );

import LocationStrategy  from '@angular/common';

constructor(private locationStrategy:LocationStrategy) 
        let currentUrl = this.locationStrategy.path();
        currentUrl = currentUrl.substring(0, currentUrl.indexOf('?'));
        console.log('currentUrl '+currentUrl);
        this.http.get(currentUrl + "/something" 
        //do someelse
        );

【讨论】:

是的,但我在 angularJS 中,我需要设置不同的 URL 如果我们使用 maven,我们可以在 pom.xml 中设置 dev、stage 和 prod 等配置文件。处理这种情况会更好。如果您使用 maven 没有问题,我将分享那段代码

以上是关于在 AngularJS 中动态重新加载配置的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS- 使用 LazyLoad- Webpack 动态加载脚本文件

AngularJS 基于路由动态加载控制器和模板

AngularJS 不能在浏览器重新加载时运行

AngularJS - 基于路由动态加载外部 JS

angularjs在下拉框中添加选项动态显示

AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖