使用AngularJS时,为什么制作新服务而不仅仅是坚持使用$ http?
为什么我会这样做:
app.factory('forecast', ['$http', function($http) {
return $http.get('https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json')
.success(function(data) {
return data;
})
.error(function(err) {
return err;
});
}]);
app.controller('MainController', ['$scope', 'forecast', function($scope, forecast) {
forecast.success(function(data) {
$scope.fiveDay = data;
});
}]);
当我可以坚持下去时:
app.controller('MainController', ['$scope', '$http', function($scope, $http) {
$http.get('https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json')
.success(function(data) {
$scope.fiveDay = data;
})
.error(function(err) {
return err;
});
}]);
也许在这种情况下它并不重要,但是因为你可以在AngularJS中创建新服务,所以我假设有一些实例是有益的。提前谢谢!
答案 0 :(得分:1)
如果你现在需要一个名为WeatherController的新控制器,它想要访问与MainController相同类型的天气数据,会发生什么。如果没有预测服务,您必须剪切并粘贴并重复$ http.get。
如果它仅限于两个实例我认为哪个好。但是如果forecast-api URL发生变化会发生什么呢?现在你必须在两个地方改变它。
如果您想要10天的预测呢?
服务或任何模块化代码的目的是帮助将离散的代码块分成可以在需要的地方重用的模块。然后你只需担心一个地方修复或改变服务。
有时候有点难以看到当你只需要在一个地方,但是在编写代码时,你必须提前考虑一些迭代,试图预见其他一些合理的用例,以使生活更轻松在路上。
答案 1 :(得分:1)
除了人们将在这里写的所有答案。
主要思想是不重复代码并将代码划分为模块。 假设您有另一个使用相同 $ http 资源的控制器。 因此,您必须将代码复制并粘贴到新控制器,而不是优雅地调用服务并使用他的方法。
处理代码怎么样?
您正在开发大型项目,并且您有很多对来自千位控制器的 $ http 请求的引用,但您将站点移动到新域,或者您的服务器开发人员更改了要使用的API其他方法。 好吧,你必须寻找使用该URL的所有conrtoller。 但是如果你想使用服务,你可以只在一个地方改变它。
有更多好处,但不适用于你的例子。