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

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

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

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

JavaScript

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

Q&A

解決済

2回答

9160閲覧

Vueコンポーネント外部からコンポーネントのメソッドを実行したい

workr

総合スコア158

Vue.js

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

JavaScript

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

1グッド

0クリップ

投稿2018/04/19 06:19

モーダルダイアログの内容をAjax処理で表示しようとしています。
AjaxでJSONデータを受け取った後のHTMLの組み立てはVueで行おうと思います。

ダイアログ自体はBootstrapの物をそのまま使うとして、ダイアログの内容だけをVueコンポーネント化しました。

html

1<div class="modal" id="exampleModal"> 2 <div class="modal-dialog"> 3 <!-- ここにVueコンポーネントを読み込みます --> 4 <image-browser></image-browser> 5 </div> 6</div> 7 8<button id="btnModal">Show Modal</button> 9 10<script> 11$('#btnModal').on('click', function(){ 12 $('#exampleModal').modal(); 13}); 14</script>

表示そのものはうまくいくのですが、2回目以降にモーダルダイアログを開いた際、前回開いたときの状態がそのままになっているため、ダイアログを開くたび(閉じるたび?)に初期化して常に最初のページが表示されるようにしたいと思います。
初期化用のメソッドはVueコンポーネント側に持たせるとしてVueコンポーネントの外(素のHTML側)からそのメソッドを実行する方法はあるのでしょうか?

Vue自体不慣れなため、根本的に方法がおかしいなどのご意見もいただけるとありがたいです。

なお、Vue関連のスクリプトはBabelでES5向けにトランスパイルしています。よろしくお願いいたします。

TatsuyaOkawa👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

次のサンプルのようになるでしょう。
サンプル実装

newしたvueのインスタンスを外から触ることができます。
なので、メソッドも呼べます。
jQueryからVueを操作するのは、あまり筋が良いとは言えないのでオススメはそんなにしませんが、まあ柔軟にやれてしまうのもVueの良いとこなので、参考にしてみてください

投稿2018/04/19 13:59

編集2018/04/19 14:57
sakapun

総合スコア888

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

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

0

初めての答えです。
modalの開閉ならメソッドを実行より変数を伝達した方がやりやすいと思うけど、
これこそVueの魅力かな

##pencodeで説明すると
https://codepen.io/toyjack/pen/OZPzjv?editors=1010

##Vueの説明書なら、こちら
条件付きレンダリング

###app.vue 親

<template> <div> <button @click="toggleModal=!toggleModal">Show Modal</button> <modal v-if="toggleModal"></modal> </div> </template> <script> import modal from './modal' export default { name:'parent', components:['modal'] data:function(){ return { toggleModal:false } } } </script>

###modal.vue 子

<template> <div class="modal" id="exampleModal"> <div class="modal-dialog"> <!-- ここにVueコンポーネントを読み込みます --> <image-browser></image-browser> </div> </div> </template>

ご参考までに

##追伸
どうしても子コンポネントのメソッドを呼びたいなら
apiのrefでも可能ですが、
stack overflowにもほかの方の答えがある
https://stackoverflow.com/questions/33682651/call-a-vue-js-component-method-from-outside-the-component

投稿2018/04/19 14:20

編集2018/04/19 14:27
toyjack

総合スコア29

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問