如何使用引导对话框作为 vueJs 组件?

Posted

技术标签:

【中文标题】如何使用引导对话框作为 vueJs 组件?【英文标题】:How to use a bootstrap dialog as a vueJs component? 【发布时间】:2017-08-31 03:09:45 【问题描述】:

我想显示和隐藏一个引导模式对话框,其中该对话框是一个 vue 组件,我可以使用 props 自定义其常量(消息、按钮)。

我使用v-if='show' 来显示它,但问题是当通过单击模态背景关闭模态时,我无法将show 设置为false。结果对话框显示一次,但当它关闭时,当我第二次按下删除按钮时它不会再次显示。

我有一个名为“person”的 vue.js 组件,它包含另一个组件“confirm-delete”,如下所示:

Person.vue:

<template>
    <div>
        <confirm-delete v-if="show" :msg="deleteMsg"></confirm-delete>
        <!-- person details -->
        <button @click="confirmDelete">
            <span class="glyphicon glyphicon-trash"></span>
        </button>
    </div>
</template>

<script>
export default 
    data () 
        return 
            show: false,
            deleteMsg: ''
        
    ,
    methods: 
        confirmDelete () 
            this.show: true,
            this.deleteMsg: 'Are you sure you want to delete this person?'
        
    

</script>

ConfirmDelete.vue:

<template>
    <div id="modalDelete" class="modal fade" tabindex="-1" role="dialog">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="media-body">
                    <p>msg</p>
                </div>
            </div>
        </div>
    </div>
<template>

<script>
    export default 
        props: ['msg'],

        mounted: function()
            $('#modalDelete').modal('show')
        
    
</script>

当然,如果我通过将对话框的代码包含在人中来仅使用一个组件,那么这是可行的。但我的目标是将此对话框组件重用到我的应用程序的其他部分。

知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

我会在Person.vue 模板中的confirm-delete 组件标记中添加一个ref 属性,然后给ConfirmDelete.vue 一个show 方法,它只是触发引导方法。这样,您可以通过this.$refs.modal.show() 从父级中的confirmDelete 方法触发引导方法。 More info on refs.

Person.vue:

<template>
    <div>
        <confirm-delete ref="modal" :msg="deleteMsg"></confirm-delete>
        <!-- person details -->
        <button @click="confirmDelete">
            <span class="glyphicon glyphicon-trash"></span>
        </button>
    </div>
</template>

<script>
    export default 
        data () 
            return 
                show: false,
                deleteMsg: ''
            
        ,
        methods: 
            confirmDelete () 
                this.$refs.modal.show();
                this.deleteMsg: 'Are you sure you want to delete this person?'
            
        
    
</script>

确认删除.vue:

<template>
    <div id="modalDelete" class="modal fade" tabindex="-1" role="dialog">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="media-body">
                    <p>msg</p>
                </div>
            </div>
        </div>
    </div>
<template>

<script>
    export default 
        props: ['msg'],
        methods: 
            show: function() 
                $('#modalDelete').modal('show')
            ,
        
    
</script>

【讨论】:

效果很好:D 我不知道 refs。您的解释比 vueJs 文档要好得多。感谢您的宝贵时间。

以上是关于如何使用引导对话框作为 vueJs 组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 vuejs 指令和 browserify 的引导选择插件

vuejs 引导卡片组件动画

如何在VueJS中将动态鼠标滚动值作为道具传递

VueJS 功能组件(SFC):如何封装代码?

Vuejs:在路线更改之前显示确认对话框

如何在混合 VueJS 应用程序上使用(命名)插槽