2013-10-07 66 views
1

我有一個問題,我正在開發一個小的AngularJS應用程序。我主要是一個jQuery開發人員。這樣下去容易在我身上;)AngularJS推()錯誤

我有一個工廠,是通過$ HTTP調用讓我的類別:

app.factory('simpleFactory', function($http, $routeParams) { 
var categories = []; 
var factory = {}; 

factory.getCategories = function() { 
    return $http({ 
     url: '/system/getlist/', 
     data: { id : pageID }, 
     method: "POST", 
    }) 
    .success(function(addData) { 
     categories = addData; 
    }); 
} 

return factory; }); 

我的控制器創建一個範圍,正從我的工廠數據:

app.controller('loadCategories', function ($scope, simpleFactory) { 
$scope.categories = []; 
init(); 

function init() { 
    $scope.categories = simpleFactory.getCategories(); 
} 

});

現在我有第二個範圍從我的視圖觸發(createCategory())插入一個新的項目在我的cateogories。現在我想將這個新項目推送到我的現有$ scope.categories中。我試圖這樣做:

$scope.createCategory = function(cat,catName,catLvl,catType) { 
    var catName = catName; 
    var parentID = cat.id; 

    $http({ 
     url: '/system/createcategory/', 
     data: { catName : catName, parentID : parentID, pageID: pageID, catLvl: catLvl, catType: catType }, 
     method: "POST", 
    }) 
    .success(function(addData) { 
     $scope.categories.push(addData); 

    }); 
} 

這最後一個控制器也住在loadCategories控制器中。

問題:

當我試圖把()裏面的東西我$ scope.categories我得到以下錯誤:

類型錯誤:對象#有沒有方法 '推'

有沒有人有一個想法,爲什麼我得到這個錯誤?我在做那些不正確的東西嗎?

ajax調用完成,成功回調被觸發,但push()出現問題。

我剛學Angularjs,所以請耐心等待:)

回答

3
$scope.categories = simpleFactory.getCategories() 

回報promise object,但不是一個數組。諾言對象沒有方法push()。 更改getCategories()返回數組的方法。

+0

是的!非常感謝你。我確實在使用承諾對象,這不是一個數組......因此推送數據是不可能的。 – Xeon

1

Ph0en1x是正確的,你需要讓承諾執行,然後分配範圍的變量,如:

simpleFactory.getCategories().then(function(data) { 
    $scope.categories = data; 
}); 

而且我會改變simpleFactory返回類別以及允許轉讓。