You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Twig模板中使用Vue.js 3且不覆盖挂载容器原有内容?

Vue.js 3 挂载时保留容器原有内容的实现方法

在Vue 3里,直接用createApp(App).mount('#app')确实会替换掉容器内的所有内容,这和Vue 2的new Vue({el: '#app'})行为不同——Vue 2会把容器里的内容当作根组件的模板来编译,不会直接清空。要在Vue 3里实现同样的效果,有两种实用的方式:

方式一:复用容器现有内容作为根组件模板

先把容器里的内容取出来当作根组件的模板,再挂载到容器上,步骤如下:

// main.ts
import { createApp } from 'vue'

// 获取目标容器
const appContainer = document.getElementById('app')
if (!appContainer) return

// 保存容器内的原有内容
const originalContent = appContainer.innerHTML

// 创建Vue应用,把原有内容作为根组件的模板
const app = createApp({
  template: originalContent
})

// 注册你需要的全局组件(比如自定义组件)
app.component('my-custom-component', () => import('./components/MyCustomComponent.vue'))

// 先清空容器,再挂载应用
appContainer.innerHTML = ''
app.mount(appContainer)

这样处理后,容器里的原有内容会被当作Vue模板编译,静态内容会保留,Vue指令、组件也能正常工作,和Vue 2的效果一致。

方式二:直接挂载空应用并利用容器内容作为模板

如果你的根组件不需要额外逻辑,也可以直接创建一个空的Vue应用,然后把容器本身作为模板引用:

// main.ts
import { createApp } from 'vue'

const app = createApp({
  template: '#app' // 这里的#app是容器选择器,Vue会自动提取容器内的内容作为模板
})

// 注册全局组件
app.component('my-custom-component', () => import('./components/MyCustomComponent.vue'))

// 挂载到容器
app.mount('#app')

这种方式更简洁,Vue会自动读取#app容器内的内容作为根模板,编译后替换容器内容,最终效果和Vue 2完全一致。

需要注意的是:如果容器里有Twig渲染的动态内容,确保这些内容在Vue挂载前已经完全渲染完成,否则Vue可能无法正确编译这些内容。

内容的提问来源于stack exchange,提问作者The50

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:45:29