vue-final / vue-final-modal

🍕Vue Final Modal is a tiny, renderless, mobile-friendly, feature-rich modal component for Vue.js.
https://vue-final-modal.org
MIT License
931 stars 99 forks source link

Dynamic Modal $vfm not working Vue3 #448

Open odion-cloud opened 3 months ago

odion-cloud commented 3 months ago

Version vue-final-modal: ^3.4.6 vue: ^3.4.34

windows 10

Steps to reproduce my code in vfmplugin.js

import { vfmPlugin } from 'vue-final-modal';

// Export the plugin directly for use in `app.js`
export { vfmPlugin };

my app.js

import { createApp } from 'vue';
import App from './views/layouts/Layout.vue';
import router from './libs/router';
import { vfmPlugin } from './libs/vfmplugin'; // Import vfmPlugin
import {openModal,closeModal} from './function/openModal'

const app = createApp(App);
// Global mixin helpers
app.mixin({
  methods: {
    openModal: openModal,
    closeModal: closeModal,
  },
});

app.use(router);
app.use(vfmPlugin); 
// Mount to the <app> element
app.mount('app');

my code in openModal.js

import { $vfm } from 'vue-final-modal';
export const openModal = (cname,param) => {

  const com = () => import(`../views/viewmyntebot/pages/others/${cname}.vue`) 
    $vfm.show({component: com,
    bind: {
        params: param
      }},param)
}

export const closeModal = (name) => {
  if(name) {
    $vfm.hide(name)
  }else {
    $vfm.hideAll()
  }
}

my Layout.vue

<template>
 <div class="main">
    <div class="main-container sub-container-bg">
     <main class="body-container">
       <router-view></router-view>
     </main>
     <modals-container style="position: fixed;z-index:100;"></modals-container>

    </div>
  </div>

  </template>

my code in pages/partials/playlist/Index.vue

<template>
    <vue-final-modal name="playlistHome" v-slot="{ close }" v-bind="$attrs" v-on="$listeners" :hide-overlay="true">

        <div class="modal" tabindex="-1">
            <div class="modal-dialog">
              <div class="modal-content">
                <div class="modal-header">
                  <h5 class="modal-title">Modal title</h5>
                  <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                  <p>Modal body text goes here.</p>
                </div>
                <div class="modal-footer">
                  <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                  <button type="button" class="btn btn-primary">Save changes</button>
                </div>
              </div>
            </div>
          </div>
    </vue-final-modal>
  </template>

when i click @click="openModal('partials/playlist/Index')" it returns

app.js:8254 [Vue warn]: Invalid VNode type: undefined (undefined) 
  at <Com key= Symbol(dynamicModal) params=undefined modelValue=true  ... > 
  at <ModalsContainer style= {position: 'fixed', z-index: '100'} > 
  at <Layout>

What is Expected? No warnings and modal is shown