zview-mobile
Version:
Mobile UI Components, based on Vue.js and ionic CSS.
65 lines (53 loc) • 1.71 kB
JavaScript
import Vue from 'vue'
import Sidebar from './Sidebar'
let _sidebars = {}
class VonicSidebar {
fromTemplateUrl(url, options) {
return new Promise((resolve, reject) => {
axios.get(url)
.then((response) => {
return response.data
})
.then((template) => {
resolve(this.fromTemplate(template, options))
})
})
}
fromTemplate(template, options) {
return this._init(template, options)
}
_init(template, options) {
let refId = (options && options.refId) ? options.refId : Math.random().toString(36).substr(3, 6)
let position = (options && options.position) ? options.position : 'left'
let wrapper = document.createElement('div')
wrapper.setAttribute('von-sidebar-container', '')
wrapper.setAttribute('von-sidebar-container-' + refId, '')
document.querySelector('[von-app]').appendChild(wrapper)
wrapper.innerHTML = `<sidebar position='${position}' ref='${refId}'>${template}</sidebar>`
let vm = new Vue({
components: {
Sidebar
},
el: `[von-sidebar-container-${refId}]`
})
_sidebars[refId] = vm.$refs[refId]
vm.$refs[refId].setWrapperSelector(`[von-sidebar-container-${refId}]`)
return vm.$refs[refId]
}
delegate(refId) {
return _sidebars[refId]
}
destroy() {
for (let refId in _sidebars) {
if (_sidebars[refId]) {
_sidebars[refId].$destroy()
_sidebars[refId] = undefined
}
let wrapper = document.querySelector(`[von-sidebar-container-${refId}]`)
wrapper.innerHTML = ''
document.querySelector('[von-app]').removeChild(wrapper)
}
_sidebars = {}
}
}
export default new VonicSidebar()