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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Onsen UI

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

Monaca

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

Q&A

解決済

1回答

864閲覧

ons-back-buttonで戻った際に値を保持したい

zenichi

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Onsen UI

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

Monaca

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

0グッド

1クリップ

投稿2017/11/10 20:11

###前提・実現したいこと
Monaca学習中の初心者です。
Navigatorで画面遷移しているのですが、page2からpage1へons-back-buttonで戻った際に、テキスト入力していた値を保存しておき、再度page2へpushした際に値を復元したいのですが出来ません。
自分なりに考えlocalStorageを使用して、popボタンからの遷移では値の保存が出来るようになりました。
ons-back-buttonを使っても値が保存が出来るやり方や、何か他に良いやり方はありますでしょうか?

###該当のソースコード

JS

1 <script> 2 window.onload = function() { 3 localStorage.removeItem('page1_data'); 4 } 5 6 document.addEventListener('init', function(event) { 7 var page = event.target; 8 9 var pg1txt = JSON.parse(localStorage.getItem("page1_data")); 10 11 if (pg1txt !== null) { 12 document.getElementById("test_txt").value = pg1txt; 13 localStorage.removeItem('page1_data'); 14 } 15 16 if (page.matches('#first-page')) { 17 page.querySelector('#push-button').onclick = function() { 18 document.querySelector('#navigator').pushPage('page2.html'); 19 }; 20 21 } else if (page.matches('#second-page')) { 22 23 page.querySelector('#pop-button').onclick = function() { 24 var txt = document.getElementById('test_txt').value; 25 localStorage.setItem('page1_data', JSON.stringify(txt)); 26 document.querySelector('#navigator').popPage(); 27 }; 28 29 } 30 }); 31 </script>

###該当のソースコード

HTML

1<body> 2 <ons-navigator id="navigator" page="page1.html"></ons-navigator> 3 4 <ons-template id="page1.html"> 5 <ons-page id="first-page"> 6 <ons-toolbar> 7 <div class="center">Page 1</div> 8 </ons-toolbar> 9 10 <div class="content" style="text-align: center"> 11 <p>This is the first page.</p> 12 <ons-button id="push-button">Push page</ons-button> 13 </div> 14 </ons-page> 15 </ons-template> 16 17 <ons-template id="page2.html"> 18 <ons-page id="second-page"> 19 <ons-toolbar> 20 <div class="left"><ons-back-button>戻る</ons-back-button></div> 21 <div class="center">Page 2</div> 22 </ons-toolbar> 23 24 <div class="content" style="text-align: center"> 25 <p>This is the second page.</p> 26 <ons-input id="test_txt" type="text" modifier="underbar" placeholder="テキスト"></ons-input> 27 <p></p> 28 <ons-button id="pop-button">Pop page</ons-button> 29 </div> 30 </ons-page> 31 </ons-template> 32</body>

###試したこと
onsen uiのOnsen UI V2 JS Navigationテンプレートを用いて最小限のコードを記述してみました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

すみません。コードを確認したら、ほぼほぼ出来てますね。

popPageは上に重なっているページ(今回で言うとpage2にあたると思います)を取り除いているだけですので、下のページ(page1)の再読み込みはされません。
ウインドウというか、タブが重なっているようなイメージだと思ってください。
ここのご理解はOKですよね?

ということで、回答としては
①「戻るボタン」が押されたら・・・の条件ではなく
page1に戻ろうとしたらという条件(popPageが行われたら)に書き換えるのがよいかと思います。

次に②page1を再読み込みする
といった処理を書けばよいと思います。

①は「onclick」よりはpopPageイベントをイベントリスナーで検知してしまいましょう。
prepopとか、postpopが該当しますかね。
リンク内容
そうすれば、どのボタンかに関係なく「戻る=popPage」という動作自体を検知できますよ。

②は色々な書き方があると思いますが、書かれている通り、ページidを取られていますので
戻ってきたページがpage1だった場合だけ、初期化処理を再度実行するようにしてはどうでしょうか?

ローカルストレージの保存・読み込みまではお済みみたいですので、
②の初期化処理内で、ローカルストレージに値があるか、ないかで条件を分ければ良いと思います。

長くなりましたが
・page2からpage1へ戻ろうとする popPageイベントをリスナーで検知
・検知したら、戻ってきたページがpage1であるか判別
・page1であれば再度page1の初期化処理を行う
がベストとかと思います。

投稿2017/11/13 00:16

編集2017/11/13 00:44
Clavat

総合スコア92

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

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

zenichi

2017/11/15 22:42

返事が遅くなり申し訳ございません。 Clavat様にご提案頂いた「prepop」のイベントを利用することで解決できそうです。 ご回答有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問