Javascript 在AngularJS中创建新服务的优势是什么?
当使用AngularJS时,为什么创建一个新服务比只使用$http更有益 我为什么要这样做:Javascript 在AngularJS中创建新服务的优势是什么?,javascript,angularjs,Javascript,Angularjs,当使用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) {
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中创建新服务,因此我假设在某些情况下,这是有益的。提前谢谢 如果您现在需要一个名为WeatherController的新控制器,该控制器希望访问与MainController相同类型的天气数据,该怎么办。如果没有forecast服务,您将不得不剪切、粘贴并重复$http.get 如果只限于两种情况,我想这很好。但是,如果预测api URL发生更改,会发生什么情况?现在您必须在两个位置进行更改 如果你想要一个10天的预测呢 服务或任何模块化代码的要点是帮助将离散的代码块分离为模块,这些模块可以在需要时重用。然后,您只需担心一个地方来修复或更改服务
当你只在一个地方需要它时,有时会有点难以理解,但在编写代码时,你必须提前考虑几次迭代,以尝试预见其他一些合理的用例,从而使今后的工作更轻松。除了人们将在这里编写的所有答案之外 主要思想是不要重复代码,而是将代码划分为模块。 假设您有另一个使用相同$http资源的控制器。 因此,您必须将代码复制并粘贴到新控制器,而不是优雅地调用服务并使用他的方法 如何处理您的代码? 您正在处理一个大型项目,并且有很多来自上千个控制器的$http请求引用,但是您将站点移动到了一个新域,或者您的服务器开发人员更改了API以使用其他方法。 嗯,你必须寻找所有使用该URL的conrtollers。 但是如果你想使用某项服务,你只能在一个地方更改它
还有更多的好处,但不适用于您的示例。在这种情况下,它是无用的(url是私有的除外),但您可以使用自定义服务做更多的事情:链接多个http调用,处理promise返回的数据
返回成功(函数(数据){return processData(数据);})
,保留私有变量,公开公共api,etcIt还帮助独立地对组件进行单元测试