Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中创建新服务的优势是什么?_Javascript_Angularjs - Fatal编程技术网

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

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) {

当使用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相同类型的天气数据,该怎么办。如果没有forecast服务,您将不得不剪切、粘贴并重复$http.get

如果只限于两种情况,我想这很好。但是,如果预测api URL发生更改,会发生什么情况?现在您必须在两个位置进行更改

如果你想要一个10天的预测呢

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


当你只在一个地方需要它时,有时会有点难以理解,但在编写代码时,你必须提前考虑几次迭代,以尝试预见其他一些合理的用例,从而使今后的工作更轻松。

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

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

如何处理您的代码?

您正在处理一个大型项目,并且有很多来自上千个控制器的$http请求引用,但是您将站点移动到了一个新域,或者您的服务器开发人员更改了API以使用其他方法。 嗯,你必须寻找所有使用该URL的conrtollers。 但是如果你想使用某项服务,你只能在一个地方更改它


还有更多的好处,但不适用于您的示例。

在这种情况下,它是无用的(url是私有的除外),但您可以使用自定义服务做更多的事情:链接多个http调用,处理promise返回的数据
返回成功(函数(数据){return processData(数据);})
,保留私有变量,公开公共api,etcIt还帮助独立地对组件进行单元测试