我不知道这是否是一个标准功能,但Vue正在替换由";el";创建实例时,而不是在实例内部进行渲染。
如果我使用id来引用";el";那么它工作得很好。即
new Vue({el: "div#app", render: h => h("span", {}, "Hello World")})
将呈现为:
<body><div id="app"><span>Hello World</span></div></body>
但是如果我使用JS元素对象作为";el";则它完全替换该元素。
const divElement = document.querySelector("div#app");
new Vue({el: divElement, render: h => h("span", {}, "Hello World")});
将呈现为:
<body><span>Hello World</span></body>
它应该这么做,还是我做错了什么?
您可能有一些困惑。我刚刚准备了一个样品,其中:
const el = document.getElementById("app");
new Vue({ el: el, render: (h) => h(App) });
成功渲染到:
<body><div id="app">// content here</div></body>
https://codesandbox.io/s/clever-swartz-yie0l?file=/src/main.js
但您仍然需要记住,这不是vue安装之前的DOM元素,而是它的虚拟表示
来自vue文档:
所提供的元素仅用作安装点。与Vue 1.x不同,在任何情况下,挂载的元素都将被Vue生成的DOM替换。因此,不建议将根实例装载到或。
https://v2.vuejs.org/v2/api/#el