2016-02-18 72 views
0

簡單而直接。我有這個工廠:工廠方法似乎不明確

ctrls.factory('dataLoad', ['$http', function($http) { 
    return { 
     loadFromJSON: loadFromJSON 
    } 

    function loadFromJSON() { 
     $http.get("data.json").then(function(response) { 
      return response; 
     }); 
    } 
}]); 

這是在我的控制器相同的模塊。在典型的路由技術之後,控制器被綁定到模板,但是所有東西都被加載到index.html模板中,所以在控制器中注入'dataLoad'應該沒有問題,這很好,並且沒有錯誤:

ctrls.controller('mainCtrl', ["$scope", "dataLoad", function($scope, dataLoad) { 

在控制器中,我稱之爲從方法loadFromJSON,然後調用這個方法:

function loadData(){ 
    dataLoad.loadFromJSON().then(function(data) { 
     $scope.allCharts = data; 
     console.log($scope.allCharts); 
    }).then(function(err){ 
     console.log(err); 
    }); 
} 
loadData(); 

但對此,不知何故,不行!它給我以下錯誤:

Error: dataLoad.loadFromJSON(...) is undefined

我在做什麼錯了?

+0

當您在控制器中執行console.log(dataLoad)時,它會說什麼? –

回答

3

loadFromJSON沒有return語句,因此在您調用它時返回undefined

您可能是想返回$http返回的承諾。

function loadFromJSON() { 
    return $http.get("data.json"); 
} 

(我刪除了then處理程序,你就放在那裏,因爲它沒有做任何事情)。

+0

我也認爲這很可能是這個問題:P – user3632710

+0

你的例子的作品!我不知道我的代碼有什麼問題,我沒有處理錯誤的可能性,但我稍後會添加它。什麼是失敗?爲什麼在當時的聲明之後內部收益不起作用? – Zerok

+0

我告訴過你什麼是錯的。 'loadFromJSON'函數沒有return語句。所以它返回undefined。所以,當你這樣做:'dataLoad.loadFromJSON()。然後'你做'undefined.then' – Quentin