Javascript 具有闭包范围变量的每个对象的角度
我有以下代码Javascript 具有闭包范围变量的每个对象的角度,javascript,angularjs,Javascript,Angularjs,我有以下代码 $scope.getBooksByUser = function (user) { var books = []; ProductFactory.getBooks.query({ id: user.id }).$promise.then(function (result) { angular.forEach(result, function(i) { books.push(i.name); debugg
$scope.getBooksByUser = function (user) {
var books = [];
ProductFactory.getBooks.query({ id: user.id }).$promise.then(function (result) {
angular.forEach(result, function(i) {
books.push(i.name);
debugger;
})
});
};
如您所见,我正在尝试为每个填充一个简单的javascript数组。执行此函数时,数组books
仍为空
我对这种行为有点困惑,因为当我试着调试我的代码时,我可以看到每次迭代的值都是在数组中设置的。实际上chrome调试器告诉我数组
books
在闭包范围内,我想这是一个原因,但我仍然找不到解释以及如何修复它
事实上,如果我使用的是$scope.books=[]
,它可以正常工作,但我不需要$scope
,只需要一个javascript数组
提前谢谢 我想这是因为异步调用AJAX
。在您的情况下,编译器不会等待ajax响应。你应该这样做
ProductFactory.getBooks.query({ id: user.id }).$promise.success(function (result) {
angular.forEach(result, function(i) {
books.push(i.name);
debugger;
})
});
希望有帮助:-)我想这是因为异步调用AJAX
造成的。在您的情况下,编译器不会等待ajax响应。你应该这样做
ProductFactory.getBooks.query({ id: user.id }).$promise.success(function (result) {
angular.forEach(result, function(i) {
books.push(i.name);
debugger;
})
});
希望有帮助:-)您可能想发布“ProductFactory”的代码,因为您的工厂可能有错误,但您提供的代码片段可能不足以诊断您的问题。您正在将i.name
推到用户
数组中,而不是推到书籍
数组中。这就是为什么它是空的。Jesse,不,它工作得很好,我知道,正如我说的,如果我使用$scope变量,它将是fineAWolf,抱歉=)它是一个拼写错误,我刚刚编辑了它“我可以看到,在每个迭代中,值都是在数组中设置的”-但你也说它是空的。所以它既是空的又不是空的?您可能想发布“ProductFactory”的代码,因为您的工厂可能有错误,但您提供的一小段代码可能不足以诊断您的问题。您正在将i.name
推入users
数组,而不是books
数组。这就是为什么它是空的。Jesse,不,它工作得很好,我知道,正如我说的,如果我使用$scope变量,它将是fineAWolf,抱歉=)它是一个拼写错误,我刚刚编辑了它“我可以看到,在每个迭代中,值都是在数组中设置的”-但你也说它是空的。所以它是空的,不是空的?维尼特,谢谢你,但它根本不起作用。我在控制台中遇到一个错误-“TypeError:undefined不是一个函数”指向success FunctionVinet,谢谢,但它根本不起作用。我在控制台中得到一个错误-“TypeError:undefined不是一个函数”,指向成功函数