提交 4743c043 编写于 作者: D dolymood

update action-sheet, dialog, picker, popup, time-picker components to singleton

上级 e7188ad8
......@@ -5,9 +5,16 @@ export default function createAPIComponent(Vue, Component, events = [], single =
let singleComponent
let singleInstance
const api = {
open(data, renderFn) {
if (singleComponent) {
singleInstance.updateRenderData(data)
open(data, renderFn, instanceSingle) {
if (typeof renderFn !== 'function') {
instanceSingle = renderFn
renderFn = null
}
if (instanceSingle === undefined) {
instanceSingle = single
}
if (instanceSingle && singleComponent) {
singleInstance.updateRenderData(data, renderFn)
singleInstance.$forceUpdate()
// singleComponent.show && singleComponent.show()
return singleComponent
......@@ -19,18 +26,30 @@ export default function createAPIComponent(Vue, Component, events = [], single =
component.remove = function () {
originRemove && originRemove.call(this)
instance.destroy()
singleComponent = null
singleInstance = null
if (instanceSingle) {
singleComponent = null
singleInstance = null
}
}
const originShow = component.show
component.show = function () {
originShow && originShow.call(this)
return this
}
const originHide = component.hide
component.hide = function () {
originHide && originHide.call(this)
return this
}
if (single) {
if (instanceSingle) {
singleComponent = component
singleInstance = instance
}
// component.show && component.show()
return component
},
create(config, renderFn) {
return api.open(parseRenderData(config, events), renderFn)
create(config, renderFn, single) {
return api.open(parseRenderData(config, events), renderFn, single)
}
}
return api
......
export default function instantiateComponent(Vue, Component, data, renderFn) {
let renderData
let childrenRenderFn
const instance = new Vue({
render(createElement) {
return createElement(Component, renderData, renderFn ? [renderFn(createElement)] : [])
return createElement(Component, renderData, childrenRenderFn ? [childrenRenderFn(createElement)] : [])
},
methods: {
init() {
......@@ -14,10 +15,11 @@ export default function instantiateComponent(Vue, Component, data, renderFn) {
}
}
})
instance.updateRenderData = function (data) {
instance.updateRenderData = function (data, render) {
renderData = data
childrenRenderFn = render
}
instance.updateRenderData(data)
instance.updateRenderData(data, renderFn)
instance.$mount()
instance.init()
const component = instance.$children[0]
......
import createAPI from '../../common/helpers/create-api'
export default function addActionSheet (Vue, ActionSheet) {
createAPI(Vue, ActionSheet, ['select', 'cancel'])
createAPI(Vue, ActionSheet, ['select', 'cancel'], true)
}
import createAPI from '../../common/helpers/create-api'
export default function addDialog (Vue, Dialog) {
const dialog = createAPI(Vue, Dialog, ['confirm', 'cancel', 'close', 'btn-click', 'link-click'])
const dialog = createAPI(Vue, Dialog, ['confirm', 'cancel', 'close', 'btn-click', 'link-click'], true)
const types = ['alert', 'confirm']
types.forEach((type) => {
dialog[type] = function (config, renderFn) {
......
import createAPI from '../../common/helpers/create-api'
export default function addPicker (Vue, Picker) {
createAPI(Vue, Picker, ['select', 'value-change', 'cancel', 'change'])
createAPI(Vue, Picker, ['select', 'value-change', 'cancel', 'change'], true)
}
import createAPI from '../../common/helpers/create-api'
export default function addPopup(Vue, Popup) {
createAPI(Vue, Popup, ['mask-click'])
createAPI(Vue, Popup, ['mask-click'], true)
}
import createAPI from '../../common/helpers/create-api'
export default function addTimePicker (Vue, TimePicker) {
createAPI(Vue, TimePicker, ['select', 'cancel', 'change'])
createAPI(Vue, TimePicker, ['select', 'cancel', 'change'], true)
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册