質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

513閲覧

[Onsen UI] pushPageを2連続で行いたい

Clavat

総合スコア92

Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2017/12/01 09:26

編集2017/12/01 09:30

Monaca x Onsen UIでアプリを作っています。
特定の条件に該当した際に、自動でページ遷移をしたいと考えていますが、
連続したページ遷移がなぜか出来ないようなので困っています。

【ページ構成】
page1、page2、page3の3ページ校正

【期待する挙動】
1 アプリを起動させると、page1.htmlが読み込まれます。
2 イベントリスナーでpage1読み込み時に aaa がNGなので page2 へ自動で遷移(pushPage)します
3 イベントリスナーでpage2読み込み時に bbb もNGなので page3 へ自動で遷移(pushPage)します
→結果として「page3」が表示されてほしい。(ただしpopPageでpage2へ、さらにpopPageでpage1へ戻れる状態)

【現状の挙動】
1 アプリを起動させると、page1.htmlが読み込まれます。
2 イベントリスナーでpage1読み込み時に aaa がNGなので page2 へ自動で遷移(pushPage)します
ここで遷移が止まってしまう。

【試したこと】
page1からpage3に直接遷移しても良いのですが、そうするとpage2が存在しないので、
page3から戻ろうとすると、page1に戻ってしまいます。これは期待した動きではないです。
※myNavigator.insertPage(●,'page2.html'); でpage2をなんとか差し込みできないだろうかとしたのですが、
●の数値を変えてみてもうまくいきませんでした。使い方が悪いのでしょうか・・・。
ページを差し込む等で対応できそうであれば、それでもOKですのでご教授ください。

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> <script src="components/loader.js"></script> <script src="lib/onsenui/js/onsenui.min.js"></script> <link rel="stylesheet" href="components/loader.css"> <link rel="stylesheet" href="lib/onsenui/css/onsenui.css"> <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css"> <link rel="stylesheet" href="css/style.css"> <script> ons.ready(function() { console.log("Onsen UI is ready!"); }); //各ページ読み込み(初期化時)に発火 document.addEventListener('init', function(event) { var page = event.target; var aaa = "NG"; //関数Aで"OK"か"NG"かが戻ってくる。NGが戻ってきたと仮定。 var bbb = "NG"; //関数Bで"OK"か"NG"かが戻ってくる。NGが戻ってきたと仮定。 if (page.id == '1st-page') { if(aaa == "NG") { alert("aaaがNGなので遷移させます"); myNavigator.pushPage('page2.html'); //2nd-pageの意味です } } else if (page.id == '2nd-page') { alert("page2に来ました"); if(bbb == "NG") { alert("bbbもNGなのでさらに遷移させます"); myNavigator.pushPage('page3.html'); //3rd-pageの意味です } } else if (page.id == '3rd-page') { alert("ここにたどり着くのが正解です"); } }); </script> </head> <body> <ons-navigator id="myNavigator" page="page1.html"> <template id="page1.html"> <ons-page id="1st-page"> <ons-toolbar> <div class="center">page1</div> <div class="right" onclick="myNavigator.pushPage('page2.html');" style="padding-left:10px; padding-right:10px;">page2へ</ons-icon></div> </ons-toolbar> <div class="content" style="text-align: center">page1</div> </ons-page> </template> <template id="page2.html"> <ons-page id="2nd-page"> <ons-toolbar> <div class="left" onclick="myNavigator.popPage()" style="padding-left:10px; padding-right:10px;">戻る</ons-icon></div> <div class="center">page2</div> <div class="right" onclick="myNavigator.pushPage('page3.html');" style="padding-left:10px; padding-right:10px;">page3へ</ons-icon></div> </ons-toolbar> <div class="content" style="text-align: center">page2</div> </ons-page> </template> <template id="page3.html"> <ons-page id="3rd-page"> <ons-toolbar> <div class="left" onclick="myNavigator.popPage()" style="padding-left:10px; padding-right:10px;">戻る</ons-icon></div> <div class="center">page3</div> </ons-toolbar> <div class="content" style="text-align: center">page3</div> </ons-page> </template> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

行けました。

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> <script src="components/loader.js"></script> <script src="lib/onsenui/js/onsenui.min.js"></script> <link rel="stylesheet" href="components/loader.css"> <link rel="stylesheet" href="lib/onsenui/css/onsenui.css"> <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css"> <link rel="stylesheet" href="css/style.css"> <script> ons.ready(function() { console.log("Onsen UI is ready!"); }); var exist_page2 = "x"; //各ページ読み込み(初期化時)に発火 document.addEventListener('init', function(event) { var page = event.target; var aaa = "NG"; //関数Aで"OK"か"NG"かが戻ってくる。NGが戻ってきたと仮定。 var bbb = "OK"; //関数Bで"OK"か"NG"かが戻ってくる。NGが戻ってきたと仮定。 if (page.id == '1st-page') { if(aaa == "NG" && bbb == "NG") { myNavigator.pushPage('page3.html'); //2nd-pageの意味です } else if (bbb == "OK"){ myNavigator.pushPage('page2.html'); exist_page2 = "o"; } } else if (page.id == '2nd-page') { } else if (page.id == '3rd-page') { alert(exist_page2); if(aaa == "NG" && bbb == "NG" && exist_page2 != "o") { myNavigator.insertPage(1, 'page2.html'); exist_page2 = "o"; } } }); </script> </head> <body> <ons-navigator id="myNavigator" page="page1.html"> <template id="page1.html"> <ons-page id="1st-page"> <ons-toolbar> <div class="center">page1</div> <div class="right" onclick="myNavigator.pushPage('page2.html');" style="padding-left:10px; padding-right:10px;">page2へ</ons-icon></div> </ons-toolbar> <div class="content" style="text-align: center">page1</div> </ons-page> </template> <template id="page2.html"> <ons-page id="2nd-page"> <ons-toolbar> <div class="left" onclick="myNavigator.popPage()" style="padding-left:10px; padding-right:10px;">戻る</ons-icon></div> <div class="center">page2</div> <div class="right" onclick="myNavigator.pushPage('page3.html');" style="padding-left:10px; padding-right:10px;">page3へ</ons-icon></div> </ons-toolbar> <div class="content" style="text-align: center">page2</div> </ons-page> </template> <template id="page3.html"> <ons-page id="3rd-page"> <ons-toolbar> <div class="left" onclick="myNavigator.popPage()" style="padding-left:10px; padding-right:10px;">戻る</ons-icon></div> <div class="center">page3</div> </ons-toolbar> <div class="content" style="text-align: center">page3</div> </ons-page> </template> </body> </html>

投稿2017/12/01 09:54

編集2017/12/01 09:56
Clavat

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問