Skip to content

Advanced Usage

Manual Control with createMount

For fine-grained control over the component lifecycle:

typescript
import { createMount } from 'vue-mount-plugin'
import Modal from './Modal.vue'

// Create instance without showing
const instance = createMount(Modal, {
  props: { title: 'Delayed Modal' }
})

console.log(instance.mounted) // false

// Show when needed
instance.show()
console.log(instance.mounted) // true

// Hide without destroying
instance.hide()
console.log(instance.mounted) // true (still tracked)

// Show again
instance.show()

// Destroy completely
instance.unmount()
console.log(instance.mounted) // false

Context Inheritance

Vue 3

Pass the app instance for proper context inheritance:

typescript
import { getCurrentInstance } from 'vue'
import { mount } from 'vue-mount-plugin'

const { appContext } = getCurrentInstance()!

const instance = mount(MyComponent, {
  app: appContext.app,
  props: { title: 'Hello' }
})

// Component can now use:
// - router (useRouter)
// - pinia stores (useStore)
// - i18n (useI18n)
// - any provided values

Vue 2

Pass parent for context inheritance:

typescript
import { mount } from 'vue-mount-plugin'

export default {
  methods: {
    showModal() {
      mount(MyComponent, {
        parent: this,
        props: { title: 'Hello' }
      })
    }
  }
}

Vue 2 with context option

typescript
mount(MyComponent, {
  parent: this,
  context: {
    router: this.$router,
    store: this.$store,
    i18n: this.$i18n
  }
})

Slots

Pass slot content to the mounted component:

typescript
import { h } from 'vue'
import { mount } from 'vue-mount-plugin'

mount(Modal, {
  props: { title: 'Hello' },
  slots: {
    default: [h('p', 'Modal content')],
    header: [h('h2', 'Custom Header')],
    footer: [h('button', 'Close')]
  }
})

Props Update

Dynamically update props after mounting:

typescript
const instance = mount(Modal, {
  props: {
    title: 'Original Title',
    loading: false
  }
})

// Update single prop
instance.setProps({ loading: true })

// Update multiple props
instance.setProps({
  title: 'Updated Title',
  loading: false
})

// Props are merged
console.log(instance.options.props)
// { title: 'Updated Title', loading: false }

Event System Details

Multiple Listeners

typescript
const instance = mount(Modal)

// Multiple listeners for same event
instance.on('update', handler1)
instance.on('update', handler2)

// Both handlers are called on emit
instance.emit('update', data)

Remove Listeners

typescript
// Remove specific listener
instance.off('update', handler)

// Remove all listeners for an event
instance.off('update')

Emit Events

typescript
instance.emit('custom-event', arg1, arg2, arg3)

Chaining

typescript
instance
  .on('event1', handler1)
  .on('event2', handler2)
  .off('event1')
  .emit('event2', data)

Global Configuration

Set defaults for all instances:

typescript
import { setGlobalConfig, globalConfig } from 'vue-mount-plugin'

// Set global defaults
setGlobalConfig({
  zIndex: 2000,
  tagName: 'section'
})

// All instances inherit these defaults
mount(Modal) // zIndex: 2000, tagName: 'section'

// Instance options override global config
mount(Modal, { zIndex: 3000 }) // zIndex: 3000

Instance Management

Get All Instances

typescript
import { getInstances } from 'vue-mount-plugin'

const instances = getInstances()
console.log(`Active instances: ${instances.length}`)

Get Instance by ID

typescript
import { getInstanceById } from 'vue-mount-plugin'

const instance = getInstanceById('mount-1-abc123')
if (instance) {
  instance.unmount()
}

Unmount All

typescript
import { unmountAll } from 'vue-mount-plugin'

// Cleanup all instances
unmountAll()

Check Mounted Status

typescript
import { isMounted } from 'vue-mount-plugin'

if (isMounted('mount-1-abc123')) {
  console.log('Instance is mounted')
}

Singleton Management

typescript
import {
  hasSingleton,
  getSingleton,
  clearSingletons
} from 'vue-mount-plugin'

// Check if singleton exists
if (hasSingleton('my-toast')) {
  console.log('Toast already exists')
}

// Get singleton instance
const existing = getSingleton('my-toast')

// Clear all singletons
clearSingletons()

Released under the MIT License.