vue3-use-modal
is vue3(vue-next) plugin that provide easy use of modal. It is not only component based but also lets using modal either asynchronous or synchronous behavior.
π¨ Caution:
vue3-use-modal
is not compatitable with vue2.
# using npm
npm install vue3-use-modal
# using yarn
yarn add vue3-use-modal
import { ModalPlugin } from 'vue3-use-modal';
createApp(App).use(ModalPlugin).mount('#app');
// plugins/modalPlugin
import { ModalPlugin } from 'vue3-use-modal';
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(ModalPlugin);
})
// nuxt.config.js
module.exports = {
plugins: [
{ src: '~/plugins/modalPlugin', mode: 'client' },
],
}
import { useModal } from 'vue3-use-modal';
// shims-vue.d.ts
declare module 'vue' {
interface ComponentCustomProperties {
$modal: ReturnType<useModal>
}
}
βοΈ See example here.
<template>
<div class="modal-bg" />
<div class="modal-content">
<h1>Hello vue-use-modal</h1>
<h2>{{ myName }}</h2>
<button @click="$emit('resolve', 'eddie')">resolve</button>
<button @click="$emit('reject', 'error')">reject</button>
<button @click="$emit('close')">close</button>
<div>
</template>
- Type:
type emit = ('resolve', value: any): void
- Description: Emit name
resolve
will resolve with the value.
- Type:
type emit = ('reject', value: any): void
- Description: Emit name
reject
will reject with the value.
- Type:
type emit = ('close')
- Description: Emit name
close
will simply close modal.
<script setup lang="ts">
import { useModal } from 'vue3-use-modal';
import SimpleModal from 'components/SimpleModal.vue';
const modal = useModal();
const onClick = async () => {
const name = await modal.addModal<string>(
{
key: 'SimpleModal',
component: SimpleModal,
props: { name: 'eddie' }
});
alert(`My name is: ${name}`);
}
</script>
OR
<script lang="ts">
import SimpleModal from 'components/SimpleModal.vue';
export default {
methods: {
async onClick() {
const name = await this.$modal.addModal<string>(
{
key: 'SimpleModal',
component: SimpleModal,
props: { name: 'eddie' }
});
alert(`My name is: ${name}`);
}
},
}
</script>
- Type:
type addModal<T> = ({ key: string, component: import('vue').Component, props?: unknown }): Promise<T>;
- Type
type closeModal = (key: string): void;
Please report bug in issue tab with template.
See CONTRIBUTION.md