- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有 Angular 的网络应用程序。
它有一个服务可以查询同一服务器上的简单节点 api。该 api 将环境变量的名称作为参数,并返回与该环境变量匹配的 java api 的路径。
servicesModule.factory('EnvVarApi', function($http){
var url = 'http://localhost:8080/api/variable_env/';
return {
getUrlApi : function(var_env, callbackSuccess) {
$http.get(url+ var_env).success(callbackSuccess);
}
}
});
这很好用。它返回以下形式的对象:{“cle”:API_KEY,“valeur”:API_PATH}
现在我想创建另一个服务,它将查询 java api(最后我将有 3 个)..我将如何仅检索一次该 API 的路径?一旦加载就返回正确的资源。 Atm 它正在崩溃,因为返回的资源在回调之前有一个空路径。
servicesModule.factory('ApiRef', function($resource, EnvVarApi){
var url = null;
EnvVarApi.getUrlApi('APIREF_KEY', function(data) {
if (data) {
url = data.valeur;
}
});
return $resource(url, {'cle' : '@cle'}, {
put : {method : 'PUT'}
});
});
第一个调用很好并返回路径,但是正如预期的那样,它中断了,因为我首先返回一个带有 null url 的 $resource 。也许有比将第一个服务注入(inject)第二个服务更好的方法。
编辑:已修复感谢下面标记的回答。
这里是最终代码:
servicesModule.factory('EnvVarApi', function($http){
var url = 'http://localhost:8080/api/variable_env/';
return {
getUrlApi : function(var_env) {
return $http.get(url+ var_env);
}
}
});
和
servicesModule.factory('ApiRef',['$q','$http', 'EnvVarApi',function ($q,$http, EnvVarApi) {
var defer = $q.defer();
EnvVarApi.getUrlApi('APIREF_KEY').then(function (resp) {
defer.resolve($http.get(resp.data.valeur));
});
return defer.promise;
}]);
最佳答案
您可以使用$q服务,查看下面的代码
app.factory('call2',['$q','$http',function ($q,$http) {
var url = 'whatever url';
var defer = $q.defer();
$http.get(url).then(function (resp) {
defer.resolve($http.get(resp.data));
//resp.data contains the returned by $http request URL object
});
return defer.promise;
}]);
在 Controller o指令端(记住将服务注入(inject) Controller )
call2.then(function (resp) {
$scope.response = resp.data;
//resp.data will contain the response of '$http.get(resp.data)'
})
你可以使用$resource代替$http.get,见下文
app.factory('call2', ['$q', '$resource', function ($q, $resource) {
var url = 'whatever url';
var defer = $q.defer();
$resource(url).get(function (resp) {
defer.resolve($resource(resp.url).get().$promise);
});
return defer.promise;
}]);
关于java - 在我的服务中,我想通过另一个服务加载路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018328/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!