2017-03-21 31 views
2

我在我的服务下面的代码:AngularJS类型错误不是一个函数

testApp.service('detailsService',['databaseService', 'loggedService', '$http', function(databaseService, loggedService, $http){ 

    var details; 

    this.getDetails = function(name){ 

     return $http({ 
      method : "GET", 
      url : name  
     }).then(function(response) { 
      details= response.data; 
      console.log(response.data); 
      return response.data; 
     }); 

    }; 

}]); 

什么我想要做的是页面(视图)加载时调用这个函数在我的控制器。

testApp.controller('testController', ['$scope', '$location', 'databaseService','detailsService', '$routeParams', function($scope, $location, databaseService, $routeParams, detailsService){ 

    $scope.details; 

    var selectedDetails = function(name){ 
      detailsService.getDetails(name).then(function(data){ 
      $scope.details= data; 
     }); 
    }; 

    selectedDetails(name); 

}]); 

我不断收到错误detailsS​​ervice.getDetails不是函数。 我在另一个控制器的detailsS​​ervice中使用了相同的功能,没有任何问题。

有没有人知道我为什么一直收到这个错误?

+0

的可能的复制[角 - 类型错误:XX不是函数](HTTP://计算器。 com/questions/30876487/angular-typeerror-xx-is-a-function) –

回答

6

由于您没有正确注入相关性,因此会出现错误,您需要使用正确的顺序。

testApp.controller('testController', ['$scope', 
    '$location', 
    'databaseService', 
    'detailsService', 
    '$routeParams', 
    function($scope, $location, databaseService, detailsService, $routeParams){ 

代替

testApp.controller('testController', ['$scope', 
    '$location', 
    'databaseService', 
    'detailsService', 
    '$routeParams', 
    function($scope, $location, databaseService, $routeParams, detailsService){ 

注意两个字符串部分和函数的参数必须匹配1:1。

+0

只是想补充一下,这个问题会解释w这些[]都是关于那些不知道和想要的。 http://stackoverflow.com/questions/18032068/what-is-the-purpose-of-square-bracket-usage-in-angular – Brian

0

删除服务中的承诺。只返回请求。因为你正赶上从控制器的承诺没有必要使用它的服务

testApp.service('detailsService', ['databaseService', 'loggedService', '$http', function(databaseService, loggedService, $http) { 
    var details; 
    this.getDetails = function(name) { 
     return $http({ 
      method: "GET", 
      url: name 
     }) 
    }; 
}]); 

同时确保序列是当你的服务注入正确的顺序。

变化这

testApp.controller('testController', ['$scope', '$location', 'databaseService', 'detailsService', '$routeParams', function($scope, $location, databaseService, $routeParams, detailsService) 

testApp.controller('testController', ['$scope', '$location', 'databaseService', 'detailsService', '$routeParams', function($scope, $location, databaseService, detailsService , $routeParams) 

控制器

testApp.controller('testController', ['$scope', '$location', 'databaseService', 'detailsService', '$routeParams', function($scope, $location, databaseService, detailsService , $routeParams) { 
    $scope.details; 
    var selectedDetails = function(name) { 
     detailsService.getDetails(name).then(function(data) { 
      $scope.details = data; 
     }); 
    }; 
    selectedDetails(name); 
}]); 
相关问题