web-dev-qa-db-ja.com

Vue.jsはボタンをクリックするだけでモーダルを開く

ボタンを使用して他のコンポーネントでモーダルを表示する方法は?たとえば、次のコンポーネントがあります。

info.vue

<template>
  <div class="container">
    <button class="btn btn-info" @click="showModal">show modal</button>
    <example-modal></example-modal>
  </div>
</template>

<script>
import exampleModal from './exampleModal.vue'
export default {
  methods: {
    showModal () {
      // how to show the modal
    }
  },
  components:{
    "example-modal":exampleModal
  }
}
</script>

exampleModal.vue

<template>
    <!-- Modal -->
    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
            </button>
        </div>
        <div class="modal-body">
            hihi
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
        </div>
        </div>
    </div>
    </div>
</template>

ExampleModal.vueからモーダルを表示する方法は?次のように、モーダルを表示するためにデータトグルとデータターゲットを使用できることを知っています。

<button class="btn btn-info" data-toggle="modal" data-target="#exampleModal">show modal</button>

しかし、「showModal」メソッドを使用してモーダルを表示する方法はありますか?

5
user3717119

スニペットによると、古典的なBootstrapモーダルを使用しています。使用する必要があるのはdata-toggleおよびdata-targetその場合の属性:

<div id="app">
  <div class="container">
    <button class="btn btn-info" data-toggle="modal" data-target="#exampleModal">show modal</button>
    <example-modal></example-modal>
  </div>
</div>

編集

質問を読み違えているので、答えを編集します。

カスタムメソッドでモーダルを開くことができます。 refsを使用して要素 "#exampleModal"を見つけて、bootstrap=メソッドでモーダルを開くだけです( Bootstrap Programmatic API

<div id="app">
  <div class="container">
    <button class="btn btn-info" @click="showModal">show modal</button>
    <example-modal ref="modal"></example-modal>
  </div>
</div>
methods: {
  showModal() {
    let element = this.$refs.modal.$el
    $(element).modal('show')
  }
}

フィドルの例

6
Sovalina

JQueryがなければ、「method:」ブロックに次のような関数を作成できます。

openEditModal(data){
  // <handle with your data>
  this.$root.$emit("bv::show::modal", "your-modal-id");
}
0
Lucas Santos