Javascript 在项目启动时从$http.GET设置Angularjs常量
在我的应用程序中,我有一个编排服务,它从注册到它的不同服务获取URIJavascript 在项目启动时从$http.GET设置Angularjs常量,javascript,angularjs,json,Javascript,Angularjs,Json,在我的应用程序中,我有一个编排服务,它从注册到它的不同服务获取URIservice_1和service_2可以在不同的机器上,但如果注册了一台机器,则会存储其机器的URI 在我的另一个使用该编排服务的应用程序中,我希望调用编排服务来获取要使用的uri,但是我希望将它们设置为角度常量,或者至少能够使用uri的值 这就是将要使用“常量”的服务,常量是从编排服务中提取的uri: (function () { 'use strict'; angular .module(
service_1
和service_2
可以在不同的机器上,但如果注册了一台机器,则会存储其机器的URI
在我的另一个使用该编排服务的应用程序中,我希望调用编排服务来获取要使用的uri,但是我希望将它们设置为角度常量,或者至少能够使用uri的值
这就是将要使用“常量”的服务,常量是从编排服务中提取的uri:
(function () {
'use strict';
angular
.module('data.model-view', ['restapi'])
.factory('MVService', MVService);
MVService.$inject = ['$http', '$q', 'exception', 'logger', 'restapi'];
/* @ngInject */
function MVService($http, $q, exception, logger, restapi) {
var HOST = restapi.mvservice.HOST;
var MODULE = restapi.mvservice.MODULE;
...
//below is an example of what will use the above host/module in order to
//get the data needed for this application
function getModels() {
return $http.get(HOST + MODULE + '/model/retrieveAll')
.then(success)
.catch(fail);
function success(response) {
return response.data;
}
function fail(e) {
return exception.catcher('XHR Failed for retrieveAll')(e);
}
}
因此,这是restapi
模块,我希望在其中设置常量,这样我可以在整个应用程序中访问它们,但我需要首先从编排服务获取它们
(function() {
'use strict';
var data = '';
angular
.module('restapi', [])
.factory('restapi', function($http, exception) {
var HOST = %%ORCSERVICE%%;
var MODULE = '/orchestration/service/rest/data';
return $http.get(HOST + MODULE)
.then(success)
.catch(fail);
function success(response) {
//so at this point I can actually access the data I need
//with a console.debug(response.data);
return response.data;
}
function fail(e) {
return exception.catcher('XHR Failed to reach orc')(e);
}
}).constant('restapi', constant());
function constant() {
//set constants here based on the data pulled from above
//ideally I want the result of this to be like
//{
// mvservice: {
// 'HOST': 'http://xxxxxxxxxx.amazonaws.com'
// 'MODULE': '/rest/service/whatever'
// },
// ... //other service here
//}
}
})();
正如我在上面的评论中所说,我实际上可以从上面的
$http.get
获取我需要的数据(URI)。我只希望能够将数据集作为常量获取,或者至少以我可以访问它的形式获取。因为当MVService
启动时,它需要来自编排服务的自己的uir,以便能够进行rest调用。抱歉,可能有点困惑,如果需要澄清,请告诉我。在获得必要的数据后,尝试启动应用程序:
var injector = angular.injector(['ng']),
http = injector.get('$http');
http.get(HOST + MODULE).then(function (result) {
app.value('restapi', result.data);
angular.bootstrap(document, [app.name]);
});
获取必要数据后,尝试启动应用程序:
var injector = angular.injector(['ng']),
http = injector.get('$http');
http.get(HOST + MODULE).then(function (result) {
app.value('restapi', result.data);
angular.bootstrap(document, [app.name]);
});
有多种方式: 如果你想使用angular.constant,你可以通过延迟angular的引导直到你得到你的值来获取url。因为加载ng应用程序后无法设置常量。要做到这一点,请参见karaxuna的答案
另一种方法是在服务的构造函数中执行角度查询。因为在服务实例化阶段的所有承诺都得到解决之前,控制器的路由和调用不会发生。因此,您可以将请求的结果存储为服务字段,然后在应用程序的控制器/指令/angular.run部分访问它,而不会出现任何赛车问题。有多种方法: 如果你想使用angular.constant,你可以通过延迟angular的引导直到你得到你的值来获取url。因为加载ng应用程序后无法设置常量。要做到这一点,请参见karaxuna的答案
另一种方法是在服务的构造函数中执行角度查询。因为在服务实例化阶段的所有承诺都得到解决之前,控制器的路由和调用不会发生。因此,您可以将请求的结果存储为服务字段,然后在应用程序的控制器/指令/angular.run部分访问它,而不会出现任何赛车问题。这太棒了。我从来都不知道这样的事情。这样的事情会发生在哪里?在
success
中,我在哪里可以访问数据?我是新来的,很抱歉,如果显而易见的话。只是想知道这对我有什么影响。或者你有没有关于这个话题的推荐文章?我还假设我会抛弃所有的常量
东西。另外,我如何从MVService
函数访问数据?和我现在一样?@erp只需在任何你想酷的地方注入restapi
,但我会在成功函数中把上面的代码放在哪里?只是很难弄清楚你的代码是如何直接应用到我的代码上的(对不起),这太棒了。我从来都不知道这样的事情。这样的事情会发生在哪里?在success
中,我在哪里可以访问数据?我是新来的,很抱歉,如果显而易见的话。只是想知道这对我有什么影响。或者你有没有关于这个话题的推荐文章?我还假设我会抛弃所有的常量
东西。另外,我如何从MVService
函数访问数据?和我现在一样?@erp只需在任何你想酷的地方注入restapi
,但我会在成功函数中把上面的代码放在哪里?只是很难弄清楚你的代码是如何直接应用于我的(对不起)