vue2 弹出框注入在指定位置后,在当前组件中可以拖拽,切换tab后不能拖拽?
开发需求需要实现弹出框可以拖拽,而且可以在弹出后,切换tab仍然可以正常拖拽。具体结构
<tabs class="tabs">    <tab>
        // 组件1
        <cop1>
            11
        </cop1>
    </tab>
    <tab>
        // 组件2
        <cop2>
            22
          // 弹出框
          <modal></modal>
        </cop2>
    </tab>
    // 弹出后插入在 tabs 中,实现切换 tab 后弹出框仍然需要存在
</tabs>
大部分效果已实现,弹框组件内部会存在默认插槽
// modal<div>
    <slot></slot>
</div>
这个插槽的内容会相对复杂。
如果使用 extend 或者 render 全局指定挂载可以实现需求。
import Modal from './modal.vue'const modal = {
    show(props) {
        const instance = new Vue({
            render(h) {
                return h(Modal, { props })
            }
        }).$mount()
        document.querySelector('.tabs').appendChild(instance.$el);
    }
}
this.$modal.show({
    value: true,
    render: (h) => {
        return h('div', 'slot')
    }
})
这样的弹出框是可以实现需求,但是由于插槽内容复杂,需要用到模版,传入 render 函数不现实。
如果使用 .vue 组件实现,在当前 tab 可以拖动,切换 tab 的后不能拖动了。
// 弹出内容<modal>
 // 复杂的内容
</modal>
现在就卡在这里,没有思路了。有没有一种方式可以解决呢?
没有人回答吗?提供个思路也可以呀
回答:
首先很感谢大家的解答,这里卡在如果使用.vue的组件模版就没法挂载在任意DOM上可以任意切换拖拽,而使用创建弹框实例,对于复杂插槽不好处理。
这里还是自己想复杂了,对于复杂插槽而言我仍是创建了一个模版组件,传入 render 函数,这样就解决了我的问题了。
// modalDraggableModal.show = (properties = {}) => {
    const { target = '.flow', render = () => {}, close = () => {}, ...props } = properties;
    const Instance = new Vue({
        render(h) {
            return h(DraggableModal, { props }, [render(h)]);
        },
    }).$mount();
    document.querySelector(target).appendChild(Instance.$el);
    const modal = Instance.$children[0];
    modal.remove = () => {
        close();
        document.querySelector(target).removeChild(Instance.$el);
        Instance.$destroy();
    };
    return modal;
};
创建需要插入的插槽组件
// previewSlot.vue<div>{{srv}}</div>
使用
// import previewSlot from './previewSlot.vue';this.$draggableModal.show({
    value: true,
    title: '预览',
    target: '.flow',
    render: h => {
        const { src } = this;
        return h(previewSlot, { props: { src }});
    },
    close: () => { }
});
回答:
你可以建议尝试下面的方法:
确保弹出框组件在切换Tab时不被销毁,可以使用Vue的keep-alive标签。
在弹出框组件内部处理拖拽逻辑,使用Vue的指令(v-draggable)或第三方拖拽库(如vuedraggable)。
在组件切换Tab时,触发拖拽功能重新初始化,以确保在切换Tab后仍能正常拖拽。
尝试调整方案,以解决切换Tab后不能拖动的问题。
以上是 vue2 弹出框注入在指定位置后,在当前组件中可以拖拽,切换tab后不能拖拽? 的全部内容, 来源链接: utcz.com/p/933900.html

