在AngularJS中创建新服务的优势是什么

What is the advantage of creating new services in AngularJS?

本文关键字:是什么 服务 AngularJS 创建 新服务      更新时间:2023-09-26

当使用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中创建新服务,我认为在某些情况下这是有益的。提前感谢!

如果您现在需要一个名为WeatherController的新控制器,它希望访问与MainController相同类型的天气数据,会发生什么。如果没有预测服务,您将不得不剪切粘贴并重复$http.get.

我想,如果只限于两个实例,那也没关系。但是,如果预测api URL发生变化,会发生什么?现在您必须在两个位置更改它。

如果你想要一个10天的预报怎么办?

服务或任何模块化代码的目的是帮助将离散的代码块分离成模块,这些模块可以在需要的地方重用。然后你只需要担心一个地方来修复或更改服务。

当你只需要在一个地方使用它时,有时很难看到这一点,但在编写代码时,你必须提前思考几次迭代,以尝试预见其他一些合理的用例,从而使未来的生活更轻松。

除了人们将在这里填写的所有答案之外。

其主要思想是不要重复代码,并将代码划分为模块。假设您有另一个使用相同$http资源的控制器。因此,您必须将代码复制并粘贴到新的控制器,而不是优雅地调用服务并使用他的方法。

如何处理代码

你正在处理一个大项目,你有很多来自数千个控制器的$http请求的引用,但你将你的网站移动到了一个新的域,或者你的服务器开发人员更改了API以使用其他方法。好吧,你必须查找所有使用该URL的骗子。但如果你想使用一项服务,你只能在一个地方更改它。

还有更多的好处,但不是以你为榜样。