如何使用 vue 绑定引导模式数据

Posted

技术标签:

【中文标题】如何使用 vue 绑定引导模式数据【英文标题】:How can I bind boostrap modal data by using vue 【发布时间】:2018-12-02 22:27:07 【问题描述】:

为了显示引导模式,我们可以使用 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>

之后,我的模式可见,但行为与单击“打开模式”按钮不同。例如,我无法通过单击模态边界来关闭模态。

提前感谢您的帮助。


编辑: 我通过使用 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 的解决方案?

【问题讨论】:

【参考方案1】:

另一种方法是以编程方式打开/关闭模式(但您需要使用 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>

【讨论】:

以上是关于如何使用 vue 绑定引导模式数据的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 绑定到名称中带有点的 DOM 自定义事件(如引导事件)

vue的数据双向绑定是怎么实现的

使用 vue.js 2.0 打开引导模式

如何更改自定义 Vue 指令的 binding.value

如何在 Vue 笑话测试中等待引导模式动画完成

引导模式应根据 vue 组件中单击的按钮行显示数据