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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Onsen UI

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

Q&A

解決済

1回答

2794閲覧

Onsen UI+Vueでpop時に遷移先のページの関数を実行する方法

Sakaki333

総合スコア8

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Onsen UI

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

0グッド

0クリップ

投稿2018/11/04 11:41

前提・実現したいこと

お世話になります。vue2とOnsenUIを使ってモバイルアプリを作成しています。

v-ons-navigatorを使ってメインページから設定ページに遷移した後、設定ページからメインページに戻った後にメインページ側で設定を適用したいと思ったのですが、実現できる方法が見つからず悩んでいます。

具体的に、設定ページから戻る際にメインページの関数を呼び出すか、メインページのイベントを発火させるかしたいのですが、方法をご存知の方がいらっしゃいましたら教えていただけると助かります。

該当のソースコード

OnsenUIのドキュメントからコードをお借りしてきました。

以下のコードで、page2からpage1に遷移する際(postpopイベントが発火した際)にpage1の関数を呼び出したいと思っています。

index.html

html

1<template id="main"> 2 <v-ons-navigator swipeable 3 :page-stack="pageStack" 4 @push-page="pageStack.push($event)" 5 @postpop="testFunction" 6 ></v-ons-navigator> 7</template> 8 9<template id="page1"> 10 <v-ons-page> 11 <v-ons-toolbar> 12 <div class="center">Page 1</div> 13 </v-ons-toolbar> 14 <p style="text-align: center"> 15 This is the first page {{ showText }} 16 <v-ons-button @click="push">Push Page 2</v-ons-button> 17 </p> 18 </v-ons-page> 19</template> 20 21<template id="page2"> 22 <v-ons-page> 23 <v-ons-toolbar> 24 <div class="left"> 25 <v-ons-back-button>Page 1</v-ons-back-button> 26 </div> 27 <div class="center">Page 2</div> 28 </v-ons-toolbar> 29 <p style="text-align: center">This is the second page</p> 30 </v-ons-page> 31</template> 32 33<div id="app"></div>

main.js

js:

1var page2 = { 2 key: 'page2', 3 template: '#page2' 4} 5 6var page1 = { 7 key: 'page1', 8 template: '#page1', 9 methods: { 10 push () { 11 this.$emit('push-page', page2) 12 }, 13 changeValue () { 14 this.showText = 'AAA' 15 } 16 }, 17 data () { 18 return { 19 showText: 'Not changed' 20 } 21 } 22} 23 24new Vue({ 25 el: '#app', 26 template: '#main', 27 methods: { 28 testFunction () { 29 // ここでpage1のchangeValue関数を実行したい 30 } 31 }, 32 data () { 33 return { 34 pageStack: [page1] 35 } 36 } 37}) 38

試したこと

vueのデバッグツールを使うと、pageStackにはページがAnonymous Componentとして登録されているようです。

何とかしてpage1のコンポーネントをpostpopの際に取得しようといろいろ試しましたが、できませんでした。

postpopイベントで渡される引数にもpage1のコンポーネントが含まれていないようで、どうして良いか分からずお手上げ状態です。

お知恵をお貸しいただけると助かります。よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

  • onsenui: 2.9.1
  • vue: 2.5.0
  • vue-onsenui: 2.5.0

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。というか、よく見たらv-ons-navigatorのドキュメントに書いてありました・・・お騒がせしました。

解決策としては、page1でpush-pageを実行する際に

js

1 this.$emit('push-page', { 2 extends: page2, 3 onsNavigatorProps: { 4 changeSettings: this.loadFilterSettings 5 } 6 })

でpage1の関数を渡しました。

その後、page2のv-ons-back-buttonのクリック時に渡された関数を実行するコードをこのように記述しました。

html

1<v-ons-back-button @click="changeSettings">戻る</v-ons-back-button>

これでスマホの方でも問題なく動きました。

投稿2018/11/05 05:24

編集2018/11/05 05:27
Sakaki333

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問