角度服务电话。它什么时候发生?

时间:2015-06-18 14:07:01

标签: angularjs

我正在为角度进行CA课程。这是控制器的代码,在controller.js中:

app.controller('MainController', ['$scope', 'forecast', function($scope, forecast) {
  forecast.success(function(data) {
    $scope.fiveDay = data;
  });
}]);

以下是service.js中服务的代码:

app.factory('forecast', ['$http', function($http) { 
  return $http.get('http://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json') 
            .success(function(data) { 
              return data; 
            }) 
            .error(function(err) { 
              return err; 
            }); 
}]);

所以我猜工厂是服务?究竟什么是服务?我看到了这个解释但对我来说并不是最清楚的。

  

服务

     

语法:module.service(' serviceName',function);结果:何时   声明serviceName作为注入参数,您将被提供   有一个函数的实例。换句话说,新的   FunctionYouPassedToService()。

在两个代码片段中,何时调用该服务?在控制器中做什么是forecast.service?什么是预测=在控制器中?它是一个对象吗?

2 个答案:

答案 0 :(得分:1)

Angular工厂是一个函数,在调用时将返回服务。这项服务几乎可以做任何事情。在您的情况下,您将在$http(...).success(..).error(...)语句中返回return的结果,该结果是承诺

因此,当您实例化控制器时,工厂会被调用,在函数体内调用HTTP调用并返回一个promise。

在控制器中,您会收到一个承诺对象,您可以致电successerror

这样,您就无法重复HTTP调用,因为一旦调用了工厂,所有其他控制器都会收到相同的实例(在这种情况下,仅在第一个控制器使用forecast依赖项实例化时才进行HTTP调用,具有该依赖关系的所有其他控制器对已经调用的HTTP请求获得相同的承诺)

答案 1 :(得分:0)

试试这个

$ http.get(' // s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json')而不是$ http.get(' http://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json&#39)

帮助了我。