我有一个名为DashboardCtrl的父控制器应用程序,以及多个子控制器(DashboardBuyerCtrl,DashboardSellerCtrl ...)
我希望能够在不同的控制器之间共享HTTP请求的结果。 目前,我在每个控制器中执行我的HTTP请求,但我认为这不是理想的性能。 我读过我应该使用服务,但我已经被困在这里了。
任何人都可以帮忙吗?
由于
答案 0 :(得分:1)
通常,使用服务是一种很好的做法,因为它可以帮助您在整个应用程序中组织和共享代码,我创建了一个小应用程序来展示如何在控制器中创建和重用服务:
var app = angular.module('testApp', []);
app.controller('ctrlA', function($scope, getIp) {
getIp().then(function(resp) {
$scope.data = resp.data.origin;
});
});
app.controller('ctrlB', function($scope, getIp) {
getIp().then(function(resp) {
$scope.data = resp.data.origin;
});
});
app.service('getIp', function($http) {
return function() {
return $http.get('https://httpbin.org/ip');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp">
<div ng-controller="ctrlA">
First controller
<p>IP: {{data}}</p>
</div>
<div ng-controller="ctrlB">
Second controller
<p>IP: {{data}}</p>
</div>
</div>
关于性能,如果内容没有经常更新(或根本没有更新),我建议使用caching选项,如下所示:
$http({
url: '...',
method: 'GET',
cache: true
});
这将保存请求的响应以供将来使用。
您可以在official documentation中了解有关服务的更多信息。