在Angular

时间:2015-06-04 02:12:58

标签: angularjs service controller

我正在尝试将参数从控制器传递到Angular中的服务。这是控制器:

angular.module('CityCtrl', []).controller('CityController',['$scope', '$http', function($scope,$http,CityService){

  $scope.data = "unknown";

  $http.jsonp('http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&callback=JSON_CALLBACK').success(function(data){
    $scope.data=data;
  });
  console.log($scope.name);
  if($scope.name){
   $scope.weather = CityService.get($scope.name);
}

     $scope.update = function (zip) {
        $scope.zip = zip;
        console.log(zip);
        $scope.weather = CityService.get({zip: zip});
        alert("Hello, " + zip);
    }
}]);

这是服务:

angular.module('CityService', []).factory('City', '$scope'['$http', function($scope,$http) {

    return {
        get : function() {
            return $http.get('/cities/' + zip);
        }
     }       
}]);

当我检查控制台时,它正在记录正确的值,但是,当它尝试运行该服务时,它说:

Cannot read property 'get' of undefined

由于某种原因,zip没有传递给服务。知道脱节的地方吗?

1 个答案:

答案 0 :(得分:2)

您需要注入City服务,当使用显式依赖注释时,它是 all或none 规则,您不能只指定部分依赖项。

angular.module('CityCtrl', []).controller('CityController',
        ['$scope', '$http', 'City'
 function($scope,  $http,  City){

此外,您不能在工厂中注入$scope(它仅可用于注入控制器,对于指令,您可以将其作为链接功能中的参数)并且看起来您也不需要。

angular.module('CityService', []).factory('City', ['$http', function($http) {

    return {
        get : function(zip) {
            return $http.get('/cities/' + zip);
        }
     }       
}]);