in packages/vue/vue-portal/src/singleSpaVue.ts [41:89]
function mount(opts, mountedInstances, props) {
return Promise
.resolve()
.then(() => {
const appOptions = {...opts.appOptions}
if (props.domElement && !appOptions.el) {
const div = document.createElement('div');
props.domElement.appendChild(div);
appOptions.el = div
}
if (!appOptions.el) {
const htmlId = `single-spa-application:${props.name}`
appOptions.el = `#${htmlId.replace(':', '\\:')} .single-spa-container`
let domEl = document.getElementById(htmlId)
if (!domEl) {
domEl = document.createElement('div')
domEl.id = htmlId
document.body.appendChild(domEl)
}
// single-spa-vue@>=2 always REPLACES the `el` instead of appending to it.
// We want domEl to stick around and not be replaced. So we tell Vue to mount
// into a container div inside of the main domEl
if (!domEl.querySelector('.single-spa-container')) {
const singleSpaContainer = document.createElement('div')
singleSpaContainer.className = 'single-spa-container'
domEl.appendChild(singleSpaContainer)
}
mountedInstances.domEl = domEl
}
if (!appOptions.render && !appOptions.template && opts.rootComponent) {
appOptions.render = (h) => h(opts.rootComponent)
}
if (!appOptions.data) {
appOptions.data = {}
}
appOptions.data = {...appOptions.data, ...props}
mountedInstances.instance = new Vue(appOptions);
if (mountedInstances.instance.bind) {
mountedInstances.instance = mountedInstances.instance.bind(mountedInstances.instance);
}
})
}