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

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

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

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

Q&A

解決済

1回答

561閲覧

Vue.js モーダル表示について

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

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

0グッド

0クリップ

投稿2018/02/11 01:47

vue-cliを使って動かしながら勉強中です。

試しに親のテンプレートに子テンプレートとしてモーダルを表示されたいのですが、
動的に表示するには一般的にどうしたらよいでしょうか。
また、親の__msg__がこの中で使えるようにしたいです。

現状はApp.vueの中のModal部分にModal.vueの中身を表示させているだけです。
※App.vueを親、Modal.vueを子としてモーダル表示になるようCSSがあたっている前提

jQueryでは親にモーダルを入れておいてCSSで非表示、
ボタンが押されたらshow()とかやっていましたが、
せっかくvueの勉強中なので先にモーダルがdomに出ない状態スタートでやってみたいです。

main.js

js

1import Vue from 'vue' 2import App from './App' 3//import router from './router' 4 5Vue.config.productionTip = false 6 7new Vue({ 8 el: '#app', 9 //router, 10 components: { App }, 11 template: '<App/>' 12}) 13

App.vue

html

1<template> 2 <div id="app"> 34 <button @click="modalOpen()">モーダル表示</button> 5 <Modal></Modal> 6 </div> 7</template> 8 9<script> 10import Modal from './components/Modal' 11 export default { 12 data () { 13 return { 14 msg: "Hello!" 15 } 16 }, 17 components: { 18 Modal 19 }, 20 methods: { 21 modalOpen () { 22 console.log('modalOpen'); 23 } 24 } 25 } 26</script>

Modal.vue

html

1<template> 2 <div>モーダル:{{msg}}</div> 3</template>

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

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

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

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

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

guest

回答1

0

ベストアンサー

v-ifで表示非表示を制御してやればいい感じですね。

vue

1<Modal v-if="isOpen"/>

そして、その変数をボタンを押したら状態が逆になるように用にコントロールしてあげます

<button v-on:click="isOpen = !isOpen"> ボタン </button>

@click=""v-on:clickのエイリアスです。どちらを使っても良いでしょう。
@clickの中では普通のjavascriptが書けるので、私は直接ここでデータをいじることも多いです。

親から子に何かを渡す時はpropsを用います。

<Modal v-bind:message="parentMesage">

基本的ながら重要な点がいくつも出てますので整理しますと

  • v-if
  • v-on:click (@click)
  • v-bind:message

ですね。
これらはぜひ、一度しっかりと公式のドキュメントを読んで理解されることをおすすめします。
https://jp.vuejs.org/v2/guide/syntax.html#v-on-%E7%9C%81%E7%95%A5%E8%A8%98%E6%B3%95

最後に、軽くサンプル実装をしてみましたので、躓いたら指針にしてみてください。
https://codesandbox.io/s/q9prqvrk9

投稿2018/02/11 14:45

sakapun

総合スコア888

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

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

退会済みユーザー

退会済みユーザー

2018/02/19 14:53

ありがとうございます。理解できました。 もう少しきちんとドキュメントを読んでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問