【问题标题】:Vue reusable dialogVue 可重用对话框
【发布时间】:2018-11-07 05:38:44
【问题描述】:

我不知道如何在 vue 中制作可重用的模态。所以,我的想法是 - 我有一个全局插件,它将全局方法 $modal 添加到 Vue,我有基本模板 ModalBase.vueheader, footer 部分。

ModalBase.vue

<template>
    <div>
        <slot name="modal-header"/>
        <slot name="modal-footer"/>
    </div>
</template>

从下一个代码开始

import MyModal from 'MyModal.vue'
mounted () {
    this.$modal.open(MyModal, someData, modalOptions)
}

我需要通过合并ModalBase.vueMyModal.vue 来获得新的组合模式窗口。 MyModal.vue 模板需要放在 ModalBase 页眉和页脚之间。如果 MyModal 已经有页脚或页眉部分,它将覆盖相同的 ModalBase 部分。所有逻辑和someData 突变必须放在MyModal.vue 中。所以在我的例子中,ModalBase 就像模态窗口的样板。

也许有更简单的解决方案来实现这一点。

【问题讨论】:

  • 我真的不知道你的问题是什么。您能否编辑您的答案并包含更大的代码段并清楚说明您不理解的内容。
  • 试图提供更多细节。

标签: javascript vue.js vuejs2 vue-component


【解决方案1】:

听起来你想使用组件。检查docs,它可能会有所帮助。基本上,您可以根据需要将组件放入组件中,然后在某个页面中的某个位置使用父组件。如果您想在存在子组件的情况下替换组件的一部分,它可能会开始变得有点混乱,老实说,我不知道该怎么做,也许其他人会这样做。

如果您尝试在它们之间传递数据,像这样的分层组件可能会变得更加困难,因此您需要小心这一点。

此外,您上面的模板代码可能无法正常工作,因为错误会告诉您“组件模板应该只包含一个根元素”。所以你需要:

<template>
  <div>
    <slot name="modal-header"/>
    <slot name="modal-footer"/>
  </div>
</template>

【讨论】:

  • 已编辑,谢谢。在我在ModalBase 中使用动态组件&lt;component :is="component" v-bind="someData"/&gt; 实现模态并为其提供一些基本方法之前。它解决了除了用自定义页脚替换页脚之外的所有问题。
  • 也许有任何方法可以在安装和渲染之前从 MyModal 中剪切页脚插槽并以编程方式在 ModalBase 中替换。
  • 其实你应该可以用插槽做你想做的事。插槽可以具有v-if 条件,因此您可以使用getElementById 的方法来查看是否有页眉或页脚并设置v-if 使用的布尔值。我会尝试玩一下,看看我是否可以为此发布一些代码。
猜你喜欢
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 2021-01-06
  • 1970-01-01
  • 2013-05-22
相关资源
最近更新 更多