runtime-with-compiler.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import config from './runtime/config'
  2. import { compile } from './compiler/index'
  3. import { getOuterHTML, query, warn } from './runtime/util/index'
  4. import Vue from './runtime/index'
  5. const mount = Vue.prototype.$mount
  6. const idTemplateCache = Object.create(null)
  7. function idToTemplate (id) {
  8. const hit = idTemplateCache[id]
  9. return hit || (idTemplateCache[id] = query(id).innerHTML)
  10. }
  11. Vue.prototype.$mount = function (el) {
  12. const options = this.$options
  13. // resolve template/el and convert to render function
  14. if (!options.render) {
  15. let template = options.template
  16. if (template) {
  17. if (typeof template === 'string') {
  18. if (template.charAt(0) === '#') {
  19. template = idToTemplate(template)
  20. }
  21. } else if (template.nodeType) {
  22. template = template.innerHTML
  23. } else {
  24. warn('invalid template option:' + template, this)
  25. }
  26. } else {
  27. template = getOuterHTML(query(el))
  28. }
  29. options.render = new Function(compile(template, {
  30. preserveWhitespace: config.preserveWhitespace
  31. }))
  32. }
  33. mount.call(this, el)
  34. }
  35. Vue.compile = compile
  36. export default Vue