我正在开发一个小的AngularJS应用程序的问题。我主要是一个jQuery开发者。所以对我很轻松;)
我有一个工厂通过$ 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中推送()内容时,我收到以下错误:
TypeError:Object#没有方法'push'
有谁知道我为什么会收到此错误?我做的事情不正确吗?
ajax调用完成并触发成功回调,但push()出现问题。
我只是在学习Angularjs,所以请耐心等待:)。
答案 0 :(得分:3)
$scope.categories = simpleFactory.getCategories()
返回promise object,但不是数组。而promise对象没有方法push()
。
更改getCategories()
方法以返回数组。
答案 1 :(得分:1)
Ph0en1x是正确的,您需要让promise执行,然后分配范围变量,如:
simpleFactory.getCategories().then(function(data) {
$scope.categories = data;
});
我会更改simpleFactory以返回类别以允许分配。