feat(vue): handle template querySelector

This commit is contained in:
Evan You 2019-12-01 23:09:34 -05:00
parent ec2feeafad
commit c8895e7cb9

View File

@ -1,15 +1,38 @@
// This package is the "full-build" that includes both the runtime // This package is the "full-build" that includes both the runtime
// and the compiler, and supports on-the-fly compilation of the template option. // and the compiler, and supports on-the-fly compilation of the template option.
import { compile, CompilerOptions } from '@vue/compiler-dom' import { compile, CompilerOptions } from '@vue/compiler-dom'
import { registerRuntimeCompiler, RenderFunction } from '@vue/runtime-dom' import { registerRuntimeCompiler, RenderFunction, warn } from '@vue/runtime-dom'
import * as runtimeDom from '@vue/runtime-dom' import * as runtimeDom from '@vue/runtime-dom'
import { isString, NOOP } from '@vue/shared'
const idToTemplateCache = Object.create(null)
function compileToFunction( function compileToFunction(
template: string, template: string | HTMLElement,
options?: CompilerOptions options?: CompilerOptions
): RenderFunction { ): RenderFunction {
const { code } = compile(template, { if (isString(template)) {
if (template[0] === '#') {
if (template in idToTemplateCache) {
template = idToTemplateCache[template]
} else {
const el = document.querySelector(template)
if (__DEV__ && !el) {
warn(`Template element not found or is empty: ${template}`)
}
template = idToTemplateCache[template] = el ? el.innerHTML : ``
}
}
} else if (template.nodeType) {
template = template.innerHTML
} else {
__DEV__ && warn(`invalid template option: `, template)
return NOOP
}
const { code } = compile(template as string, {
hoistStatic: true, hoistStatic: true,
cacheHandlers: true,
...options ...options
}) })