[英]Vue3: how to avoid Vitejs to erase/replace all DOM content when mounting the app?
我来自 Vue 2,我习惯使用 wordpress 标准 html 页面并在其中使用一些 Vue 组件。 只需将容器传递给主 app el
属性,然后我就可以在容器上使用我想要的组件,而无需删除或替换所有默认容器的内容。 基本上,将一个 dom 元素传递给el
属性,使该元素成为一个 Vue 应用程序,包括它的所有内容(即使没有任何 Vue 组件)。
使用 Vue 3 和 createApp,似乎没有办法做到这一点,因为一旦我将应用程序安装到容器(比如#app),那么所有容器的内容都会被删除或替换为组件的模板(如果传递了一个组件) )。 即使是以下不使用任何组件的内容,也会清除所有#app 原始内容:
import { createApp } from 'vue'
createApp({
}).mount('#app');
如何避免? 如何在免费的 html 页面上只使用一些备用组件? SFC 使用同样的方法怎么样?
从技术上讲,Vue 总是替换元素的内容(Vue 2 替换了元素本身,Vue 3 替换了它的内部内容 - 迁移指南)
如果正在安装的应用程序/组件没有template
选项或render
function,那么(并且只有在那时)Vue 会获取 DOM 元素的原始内容(在它安装之前)并尝试将其编译为渲染 function(这就是您需要编译器的原因+ 使用 DOM 内模板时的运行时构建)
这也意味着,如果您的页面主要由 static HTML(来自 WordPress)和 Vue 的“少量”组成,那么这个解决方案非常无效,也是petit-vue存在的原因(我建议阅读与标准 Vue 的比较
反正。 我无法重现您的问题...
const app = Vue.createApp({ }).mount("#app")
<script src="https://unpkg.com/vue@3.2.9/dist/vue.global.js"></script> <div id='app'> <div> <h2>Hello from HTML!</h2> </div> </div>
那么有什么问题呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.