Как я могу привязать модальные данные boostrap с помощью vue

Чтобы показать bootstrap modal, мы можем использовать атрибут data-toggle. Например: <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#msg">Open Modal</button>

Я хочу показать модальный, используя переменные vue bool. Это мой компонент:

Vue.component('modal', {
delimiters: ['[[', ']]'],
props: {
    id: String,
    hidden: Boolean
},
data: function () {
    return {
    }
},
computed: {
    getStyle: function() {
        if(this.hidden)
            return "display: hidden;"
        return "display: block;"
    }
},
methods: {
},
template: `
    <div class="modal fade" v-bind:class="{show: !hidden}" role="dialog" :style="getStyle" :id="id">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <slot name="header"></slot>
                </div>
                <div class="modal-body">
                    <slot></slot>
                </div>
            </div>
        </div>
    </div>
`
})

чем в html У меня есть:

<div id="msg_modal">
  <modal :id="'msg'" :hidden='isHidden'>
    {{ message }}
  </modal>
</div>

и в сценарии:

<script>
  var msg_modal = new Vue({
    el: '#msg_modal',
    data: {
      isHidden: false
    }
  })  
</script>

После этого мой модальный вид, но поведение отличается от нажатия кнопки «Открыть модальный». Например, я не могу закрыть модальный, выйдя из модальных границ.

Заранее спасибо за вашу помощь.


EDIT: я временно исправил, что с помощью jquery

computed: {
    id_selector: function() {
        return "#"+this.id;
    }
},
methods: {
    show: function() {
        this.modal('show');
    },
    hide: function() {
        this.modal('hide');
    },
    toggle: function() {
        this.modal('toggle');

    },
    modal: function(action) {
        $(this.id_selector).modal(action);
    }
},

Кто-нибудь знает решение без jquery?

javascript,html5,vuejs2,bootstrap-4,vue-component,

0

Ответов: 1


EDIT: я временно исправил, что с помощью jquery

computed: {
    id_selector: function() {
        return "#"+this.id;
    }
},
methods: {
    show: function() {
        this.modal('show');
    },
    hide: function() {
        this.modal('hide');
    },
    toggle: function() {
        this.modal('toggle');

    },
    modal: function(action) {
        $(this.id_selector).modal(action);
    }
},

Кто-нибудь знает решение без jquery?

10
0

Другим способом было бы открыть / закрыть программный код (но вам нужно использовать jquery):

Vue.component('modal', {
props: ['id'],
template: `
    <div class="modal fade" role="dialog" :id="id">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <slot name="header"></slot>
                </div>
                <div class="modal-body">
                    <slot></slot>
                </div>
            </div>
        </div>
    </div>
`
})
new Vue({
  el: '#msg_modal',
  data: {
    message: 'Modal content'
  },
  methods: {
    showModal() {
      let element = document.getElementById('msg')
      $(element).modal('show')
    }
  }
})  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>

<div id="msg_modal">
  <modal :id="'msg'">
    <template slot="header">Header</template>
    {{ message }}
  </modal>
  <button class="btn btn-info btn-lg" @click="showModal">Open Modal</button>
</div>

JavaScript, html5, vuejs2, самозагрузки-4, Вью-компонент,
Похожие вопросы