forked from rc/aircox
radiocampus: style update
This commit is contained in:
50
radiocampus/assets/src/vueLoader.js
Normal file
50
radiocampus/assets/src/vueLoader.js
Normal file
@ -0,0 +1,50 @@
|
||||
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() }
|
||||
}
|
||||
Reference in New Issue
Block a user