所以这是我的控制器:
app.controller('dbCtrl', function($scope, $http) {
$http.get("http://private-abc.apiary-mock.com/bus")
.success(function(response) {
$scope.network = response.networkupdates;});
});
我接下来要做的是调用第二个HTTP请求,我想在最佳实践方面最好是创建第二个控制器来调用第二个HTTP,或者最好在第二个HTTP调用中包含第二个HTTP调用电流控制器(如果是,如何?) 感谢。
答案 0 :(得分:0)
因此,使用promises的一个很酷的方面是它们可以被链接。所以在你的情况下,你打电话:
$http.get("http://private-abc.apiary-mock.com/bus")
返回一个承诺,然后您可以链接到另一个承诺,如下所示:
var requests = $http.get("http://private-abc.apiary-mock.com/bus").then(function(response) {
$scope.network = response.networkupdates;
// make second get call and return it to chain the promises
return $http.get("some-other-endpoint").then(function(otherResponse) {
// you can do something here with the response data
return otherResponse;
});
});
你现在拥有的是两个链接的承诺,它将返回最终值,所以如果你稍后再说:
requests.then(function(otherResponse) {
// or you can do something here
doSomething(otherResponse);
});
就Angular的最佳实践而言,我会说你最好创建一个服务或工厂来处理任何和所有的http请求。控制器实际上只是将数据绑定到视图;服务是您的业务逻辑和数据填充应该发生的地方。
答案 1 :(得分:0)
您可以在同一个控制器中进行$http
来电。
$http
服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回带有两个$ http特定方法的promise
:{{1} }。它内部使用success and error
(受Kris Kowal的Q启发的承诺/延期实施)。
如果您的两个$q
彼此独立,则可以使用$http
“加入”您的http通话结果。
示例:
$q.all
如果您的http呼叫相互依赖,那么您可以使用$q.all([
$http.get("http://private-abc.apiary-mock.com/bus"),
$http.get('/someUrl')
]).then(function(results) {
$scope.network = results[0];
$scope.whatevername= results[1]
});
}
。
例如:
chaining
有关$http.get("http://private-abc.apiary-mock.com/bus").then(function(result) {
$scope.network = result.networkupdates;
return $http.get("someurl").then(function(res) {
return res;
});
});
的推荐,您可以看到https://github.com/kriskowal/q
有关q
的推荐,您可以看到https://docs.angularjs.org/api/ng/service/ $ q