我有一个AngularJS应用程序,它应该调用几个基于Spring的REST API,其中url将根据环境动态显示。
就像我在开发环境中运行一样,REST URL将是localhost:7777/..
如果正在制作,那将是productionserver:7777/...
。
现在我必须向Angular提供这些API URL。 在我的AngularJS应用程序中,在运行时配置这些REST URL的最佳方法是什么?
答案 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自动完成。