feat(vue): handle template querySelector
This commit is contained in:
		
							parent
							
								
									ec2feeafad
								
							
						
					
					
						commit
						c8895e7cb9
					
				@ -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
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user