Vue 替换"el"组件而不是在其中渲染?



我不知道这是否是一个标准功能,但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

最新更新