vue3-yuanma/packages/vue/src/index.ts

41 lines
893 B
TypeScript
Raw Normal View History

2018-09-20 03:19:25 +00:00
import {
h,
render,
2018-09-20 03:43:27 +00:00
nextTick,
createComponentInstance,
createComponentClassFromOptions
2018-09-20 03:19:25 +00:00
} from '@vue/renderer-dom'
2018-09-20 01:52:24 +00:00
class Vue {
2018-09-20 03:19:25 +00:00
static h = h
static render = render
2018-09-20 03:43:27 +00:00
static nextTick = nextTick
2018-09-20 01:52:24 +00:00
// Note: typing for this is intentionally loose, as it will be using 2.x types.
2018-10-09 17:59:30 +00:00
constructor(options: any) {
// convert it to a class
const Component = createComponentClassFromOptions(options || {})
const vnode = h(Component)
const instance = createComponentInstance(vnode, Component, null)
2018-09-20 03:19:25 +00:00
function mount(el: any) {
2018-09-20 03:43:27 +00:00
const dom = typeof el === 'string' ? document.querySelector(el) : el
2018-09-20 03:19:25 +00:00
render(vnode, dom)
return instance.$proxy
}
2018-09-20 01:52:24 +00:00
2018-09-20 03:19:25 +00:00
if (options.el) {
return mount(options.el)
} else {
;(instance as any).$mount = mount
return instance.$proxy
2018-09-20 01:52:24 +00:00
}
}
}
2018-10-09 17:59:30 +00:00
interface Vue {
$mount(el: any): any
2018-10-08 22:09:13 +00:00
}
2018-09-20 01:52:24 +00:00
export default Vue