2016-04-09 94 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) { 
     // ... 
    } 

我從來沒有過這個問題,要確保依賴注入的順序是正確的,直到今天。如果畢竟這你的代碼仍然無法正常工作,那麼問題可能在其他地方。
我希望這可以幫助。

相關問題