2016-04-09 64 views
5

财产“查询”我熟悉自己与AngularJS和拨打电话到Web API后台,我得到的获取类型错误:无法读取的不确定

angular.js:13424 TypeError: Cannot read property 'query' of undefined

错误我有一个productListController

(function() 
{ 
"use strict"; 
angular.module("productManagement").controller("ProductListController", ["productResource", ProductListController]); 
function ProductListController($scope, productResource) { 

    productResource.query(function (data) { 
     $scope.products = data 
    }); 
} 
})(); 

,我创建了一个名为productResource

(function() { 
"use strict"; 

angular.module("common.services").factory("productResource", ["$resource", "appSettings", productResource]) 

function productResource($resource, appSettings) { 
    return $resource(appSettings.serverPath + "/api/products/:id").query(); 
} 
}()); 

该服务的appSettings是一个常数指定一个路径。

为什么query未定义?

回答

7

你的控制器需要下列的依赖将被注入:

$scope, productResource 

,实际上您注射,而不是只"productResource""$scope", "productResource"

你的控制器应被初始化这样的:

angular.module("productManagement").controller("ProductListController", ["$scope", "productResource", ProductListController]); 

function ProductListController($scope, productResource) { 
    // ... 
} 

传递的依赖关系的名称需要与控制中的参数同步er函数声明 - 在您注入"productResource"时,它将进入$scope参数。

+0

这一切都有道理,感谢你 – Arianule

1

我刚才有这个问题,花了我几个小时才弄明白。

在某些情况下,您需要确保注入"productResource""$scope"并遵循特定的顺序。让我证明:

angular.module("productManagement").controller("ProductListController", ["$scope", "productResource", ProductListController]); 

    function ProductListController($scope, productResource) { 
     // ... 
    } 

上面的代码将总是工作,但如果你如下图所示,在某些情况下(如我上面提到的)开关位置,它不会工作。

angular.module("productManagement").controller("ProductListController", ["productResource","$scope", ProductListController]); 

    function ProductListController($scope, productResource) { 
     // ... 
    } 

我从来没有过这个问题,要确保依赖注入的顺序是正确的,直到今天。如果毕竟这你的代码仍然无法正常工作,那么问题可能在其他地方。
我希望这可以帮助。

相关问题