diff --git a/examples/App.vue b/examples/App.vue index 6f0c435..4c8bc3b 100644 --- a/examples/App.vue +++ b/examples/App.vue @@ -72,6 +72,15 @@ +
+ +
+ + +
+
+
@@ -116,6 +125,7 @@ export default { dismissible: true, queue: false, position: 'bottom-right', + parentContainer: null, onClick: this.onClick, onDismiss: this.onDismiss, }, diff --git a/src/js/Component.vue b/src/js/Component.vue index a9d4ba0..aaeafaf 100644 --- a/src/js/Component.vue +++ b/src/js/Component.vue @@ -65,6 +65,10 @@ export default defineComponent({ type: Boolean, default: true }, + parentContainer: { + type: String, + default: null + } }, data() { return { @@ -83,8 +87,8 @@ export default defineComponent({ }, methods: { setupContainer() { - this.parentTop = document.querySelector('.v-toast.v-toast--top'); - this.parentBottom = document.querySelector('.v-toast.v-toast--bottom'); + this.parentTop = this.parentContainerElement.querySelector('.v-toast.v-toast--top'); + this.parentBottom = this.parentContainerElement.querySelector('.v-toast.v-toast--bottom'); // No need to create them, they already exists if (this.parentTop && this.parentBottom) return; @@ -98,9 +102,8 @@ export default defineComponent({ this.parentBottom.className = 'v-toast v-toast--bottom' } - const container = document.body; - container.appendChild(this.parentTop); - container.appendChild(this.parentBottom); + this.parentContainerElement.appendChild(this.parentTop); + this.parentContainerElement.appendChild(this.parentBottom); }, shouldQueue() { @@ -189,6 +192,9 @@ export default defineComponent({ } } }, + parentContainerElement() { + return this.parentContainer ? document.querySelector(this.parentContainer) : document.body + } }, beforeUnmount() { eventBus.off('toast-clear', this.dismiss) diff --git a/src/js/api.js b/src/js/api.js index 2f5c8ef..b6dfdbd 100644 --- a/src/js/api.js +++ b/src/js/api.js @@ -14,7 +14,9 @@ export const useToast = (globalProps = {}) => { const propsData = Object.assign({}, defaultProps, globalProps, options); - const instance = createComponent(ToastComponent, propsData, document.body); + const parentContainer = propsData.parentContainer ? document.querySelector(propsData.parentContainer) : document.body + + const instance = createComponent(ToastComponent, propsData, parentContainer); return { dismiss: instance.ctx.dismiss