AngularJS - 在运行时提供HTTP URL的最佳方式

时间:2018-02-09 02:56:16

标签: angularjs

我有一个AngularJS应用程序,它应该调用几个基于Spring的REST API,其中url将根据环境动态显示。 就像我在开发环境中运行一样,REST URL将是localhost:7777/.. 如果正在制作,那将是productionserver:7777/...

现在我必须向Angular提供这些API URL。 在我的AngularJS应用程序中,在运行时配置这些REST URL的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

为其他网址或REST数据创建服务: -

 (function () {
var injectParams = ['$location'];
var service = function ($location) {
    var vm = this;
    vm.baseUrl = 'http://' + $location.host() +':'+$location.port() + '/api/v1/';
    return vm;
};
//bootstrapping
service.$inject = injectParams;
angular.module('showdown').service('restURL', service);
}());

答案 1 :(得分:0)

根据您的设置,您可能希望通过ng-init注入您的网址。如果需要,只需确保JS和HTML转义字符串。

所以你的HTML看起来像这样:

<div ng-app="myApp" ng-init="
    myUrl='${myUrl?html?js_string}';
    myUrl2='${myUrl2?html?js_string}';">

你的Javascript看起来像这样:

angular.controller("myApp", () => ($scope) => {
    $scope.myUrl; //url is here
});

答案 2 :(得分:0)

您可以将所有api配置放入一个名为config.json的json文件中,然后在应用程序启动之前,您可以获取该数据并从中获取一个常量,然后将其注入任何您需要的地方,如下:

让我们说config.json包含以下值:

reduce

在引导之前注入配置api url:

{
 "ApiUrls": {
   "ApiUrl1": "value1",
   "ApiUrl2": "value2",
   "ApiUrl3": "value3"
  }
}

以及您的服务:

(function () {
fetchData().then(bootstrapApp);

function fetchData() {
    var initInjector = angular.injector(["ng"]);
    var $http = initInjector.get("$http");

    return $http.get("config.json").then(function (response) {
        app.constant("ApiConfiguration", response.data.ApiUrls);
    }, function (errorResponse) {
        alert(errorResponse);
        // Handle error case
    });
}

function bootstrapApp() {
    angular.element(document).ready(function () {
        angular.bootstrap(document, ["app"]);
    });
}
}());

这样您就可以根据环境在config.json文件中设置值。在本地,它将是app.factory('factory', factory); factory.$inject = ['ApiConfiguration']; function factory(ApiConfiguration){ var serviceFactory = { ApiUrl1: ApiConfiguration.ApiUrl1 } return serviceFactory; } ,在生产中它将是localhost:7777/..等。

答案 3 :(得分:-1)

在您的应用程序中创建一个const,如SERVER-ENV,并编写构建任务以根据服务器环境更改此常量的值。 现在您可以使用此const创建URL,例如SERVER-ENV +&#34;&#34 ;; 这项任务可以通过gulp或grunt自动完成。