基本上我有一个从中提取数据的数组。我想为它添加一个新数组,以便我可以提取更多数据。
var myArray.libraries = []
通过for循环添加项目,如下所示:
for(var x=0; x < items.length; x++){
myArray.libraries ({ name: items(x).name, state: items(x).state});
}
效果很好,我可以从myArray.libraries .name
得到我需要的东西。我需要添加像#34; books&#34;所以每个条目都可以有它的书籍清单。可能有一本或多本书。
要明确我使用角度,所以我使用这样的东西输出每个库:
<div ng-repeat="library in libraries">
<p>{{library.name}}</p>
</div>
我只需要添加books
,这样我就可以遍历该库中的每本书:
<div ng-repeat="book in libraries.books">
<p>{{book.name}}</p>
</div>
我尝试使用myArray.libraries.books = []
,但没有将收集添加到每个库。我也试过了myArray.libraries.push({ books: { } })
,但这没有任何影响,并给了我一个错误,我无法推到myArray.libraries.books
,因为书籍不存在。
修改
这是一些示例代码。我使用角度,但原则应该是相同的:
$scope.libraries= [];
//start loop to get the installations
for (var x = 0; x < res.rows.length; x++) {
$scope.libraries.push({ ... , books: []});
//run a new query to get the additional libraries info
var booksQuery = query to get books;
//run query to get results and loop through them
for (var i = 0;i < res2.rows.length; i++) {
$scope.libraries[x].books.push({ name: res2.rows.item(i).prodName });
}
});
}
修改
我运行了一些测试,当我第二次调用数据库时,它不知道原来的$scope
是否存在。
答案 0 :(得分:2)
尝试如下:
for(var x=0; x < items.length; x++){
myArray.libraries ({ name: items(x).name, state: items(x).state, books: []});
}
这应该可以解决问题。
答案 1 :(得分:1)
基本上问题是你正在尝试将数组推送到数组。您可以将另一个数组推送到libraries
,但要访问图书,您必须使用索引来访问特定项目,例如myArray.libraries[0].books[0]
因此,我假设您必须将myArray.libraries.push({ books: { } })
更改为myArray.libraries.push({ books: [] })
答案 2 :(得分:0)
我为你创造了一个plunker。请参阅
“http://plnkr.co/edit/0FKg2fbe4CY11Oz6aSBF?p=preview”
$scope.libraries = {
books : [
{"name" : "book1"},
{"name" : "book2"},
{"name" : "book3"}
]
};
答案 3 :(得分:0)
这会对你有所帮助。
数据库调用是异步的,因此第二个数据库调用不应该处于循环中。请检查一下是否有效
$scope.libraries = [];
init();
function init() {
// do the first db transaction
}
// transaction1 callback
function trans1Callback(result) {
addBooks(result);
}
var i = 0;
function addBooks(result) {
// to stop iteration at the end of records
if (i >= result.rows.length) {
return;
}
var item = result.rows.item(i);
var data = {name: item.name, state: item.state, books: []};
// do the second db transaction
// transaction2 callback
function trans2Callback(result2) {
for (var j =0; j < result2.rows.length; j++) {
var book = result.rows.item(j);
data.books.push({ name: book.prodName });
}
// push to scope libraries
$scope.libraries.push(data);
// do increment
i++;
// Call addBooks again to process next record
addBooks(result);
}
}