forked from rc/aircox
51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
import {createApp} from 'vue'
|
|
|
|
import PageLoad from './pageLoad'
|
|
import BackgroundLoad from './backgroundLoad'
|
|
|
|
|
|
/**
|
|
* Handles loading Vue js app on page load.
|
|
*/
|
|
export default class VueLoader {
|
|
constructor({el=null, props={}, ...appConfig}={}, loaderOptions={}) {
|
|
this.appConfig = appConfig
|
|
this.appConfig.el = el
|
|
this.props = props
|
|
this.pageLoad = new PageLoad(el, loaderOptions)
|
|
|
|
this.pageLoad.onPreMount = event => this.onPreMount(event)
|
|
this.pageLoad.onMount = event => this.onMount(event)
|
|
|
|
this.backgroundLoad = new BackgroundLoad()
|
|
}
|
|
|
|
enable(hotReload=true) {
|
|
hotReload && this.pageLoad.enable(document.body)
|
|
this.mount()
|
|
}
|
|
|
|
mount() {
|
|
if(this.app)
|
|
this.unmount()
|
|
|
|
const app = createApp(this.appConfig, this.props)
|
|
app.config.globalProperties.window = window
|
|
this.vm = app.mount(this.pageLoad.el)
|
|
this.app = app
|
|
}
|
|
|
|
unmount() {
|
|
if(!this.app)
|
|
return
|
|
try { this.app.unmount() }
|
|
catch(_) { null }
|
|
this.app = null
|
|
this.vm = null
|
|
this.pageLoad.reset()
|
|
}
|
|
|
|
onPreMount() { this.unmount() }
|
|
onMount() { this.mount() }
|
|
}
|