我正在为角度进行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?什么是预测=在控制器中?它是一个对象吗?
答案 0 :(得分:1)
Angular工厂是一个函数,在调用时将返回服务。这项服务几乎可以做任何事情。在您的情况下,您将在$http(...).success(..).error(...)
语句中返回return
的结果,该结果是承诺。
因此,当您实例化控制器时,工厂会被调用,在函数体内调用HTTP调用并返回一个promise。
在控制器中,您会收到一个承诺对象,您可以致电success
或error
。
这样,您就无法重复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)
帮助了我。