【发布时间】:2020-12-18 11:31:17
【问题描述】:
Vue 3 有一个新的 Teleport 功能,它取代了 vue 2 中的 portal-vue 插件。但是,我发现不可能将组件移植到由 vue 控制的地方(=在 vue 应用程序中)。它仅在移植到外部(主体、其他元素...)时才有效。
const app = {
template: `
<div>
<h1>App</h1>
<div id="dest"></div>
<comp />
</div>`
}
Vue.createApp(app).component('comp', {
template: `
<div>
A component
<Teleport to="#dest">
Hello From Portal
</Teleport>
</div>`
}).mount('#app')
<script src="https://unpkg.com/vue@3.0.0-rc.9/dist/vue.global.js"></script>
<div id="app"></div>
如您所见,控制台甚至会报告传送目标需要已经渲染。但是如何告诉 vue 先渲染哪个组件呢?在我的示例中,目标位于传送之前的 dom 中。
这在portal-vue 中不是问题,而且相当糟糕,因为它使整个概念变得不那么可用。
【问题讨论】:
-
如果你添加
disabledprop<Teleport to="#dest" disabled >它会显示传送内容,在这种情况下它表现为一个插槽,它仍然会发出警告 -
我认为这是因为它仍然会评估目标是否可达(开发版毕竟应该可以帮助您找到潜在的错误)
-
有趣的是,您的示例在 Vite 应用程序中没有错误/警告(也使用
vue@3.0.0-rc.9)。 -
如果将目标移到组件后面会怎样?
-
把id为dest的div放在
<comp>后面
标签: vue.js vuejs3 vue-teleport