私はSQLite pluginでオフラインで動作させるためにCordova /角型アプリケーションを構築しようとしていますが、これは私の状況であるデータベースへの約束と非同期の問題です:角度の入れ子になったループの約束
私はこのように構成された5台持っている:idとpage_idのでIDとタグ 表PageMenusとID、タイトル、TEMPLATE_IDと身体 表のメニューで
表ページとページとメニュー 表を関連付けることmenu_id menu_idのidを持つMeniItemsと、教師のメニューの "実際の"要素を持つbody idがaのテーブルテンプレートndタグを使用して適切な表示を選択する
互換性の理由から(私はwebappとモバイルアプリケーションに同じコードを使用していますが、モバイルでは私のAPIを呼び出すwebappではデバイスのすべてのコンテンツをダウンロードしています)私はすでに適切なフォーマットを取得することができるよ
{
"id": 1
"body": "Welcome to the homepage",
"title": "Homepage",
"template_tag": "tab",
"menus": [
{
"id": 3,
"tag": "home_menu",
"menu_items": [
{
"menu_id": 3,
"body": "Movie"
},
{
"menu_id": 3,
"body": "Restaurant"
},
{
"menu_id": 3,
"body": "Messages"
},
{
"menu_id": 3,
"body": "Systems"
}
]
},
{
"id": 62,
"tag": "user_menu",
"menu_items": [
{
"menu_id": 62,
"body": "About"
},
{
"menu_id": 62,
"body": "Updates"
},
{
"menu_id": 62,
"body": "Help"
},
{
"menu_id": 62,
"body": "Reset Password"
},
{
"menu_id": 62,
"body": "Report/ Feedback"
}
]
}
]
}
が、私の問題は、コントローラが前にメニューの体にアクセスしようとしていることであるがこのように解決され、私はエラーがこれを未定義取得:この形式でページをretriveする必要があります私はthemomentで私の工場で使用しているコードです:
return {
getHomePage: function() {
// other function
},
getPage: function(id) {
var results = $q.defer();
function request() {
var res = {};
var queryPage = "SELECT pages.id, pages.body, pages.title, templates.tag AS template_tag FROM pages JOIN templates ON pages.template_id = templates.id WHERE pages.id = ?";
$cordovaSQLite.execute(db, queryPage, [id]).then(function(page) {
res = page.rows.item(0);
res.menus = [];
var queryMenus = "SELECT menus.id, menus.tag FROM menus JOIN page_menus ON menus.id = page_menus.menu_id WHERE page_menus.page_id = ?";
$cordovaSQLite.execute(db, queryMenus, [res.id]).then(function(menus) {
for (var i = 0; i < menus.rows.length; i++) {
var menu = {
id: menus.rows.item(i).id,
tag: menus.rows.item(i).tag,
menu_items: []
};
var queryMenuItems = "SELECT * FROM menu_items JOIN menus ON menu_items.menu_id = menus.id where menus.id = ?"
$cordovaSQLite.execute(db, queryMenuItems, [menus.rows.item(i).id]).then(function(menu_items) {
for (var i = 0; i < menu_items.rows.length; i++) {
menu.menu_items.push(menu_items.rows.item(i));
}
});
res.menus.push(menu);
};
results.resolve(res);
});
});
};
request();
return results.promise;
},
getMedia: function(id) {
// other function
}
};
あなたが 'ui-router'を使っているなら' resolve'を見てください。問題は、データが利用できないときにデータを要求することです。 'resolve'アプローチは、状態がロードされる前にデータをロードして、期待どおりのものを確保できるようにします。そのコードを見るだけであなたのコンテキストを定義するのは難しいです。 –