传送

你是视觉学习者吗?
通过我们深入的屏幕录制掌握 Livewire
立即观看

Livewire 允许你将模板的一部分传送到页面中 DOM 的另一部分。

这对于嵌套对话框之类的功能很有用。在另一个对话框中嵌套一个对话框时,父模态的 z 索引将应用于嵌套模态。这会导致背景和叠加样式出现问题。为了避免这个问题,你可以使用 Livewire 的 @teleport 指令将每个嵌套模态渲染为已渲染 DOM 中的同级元素。

此功能由 Alpine 的 x-teleport 指令 提供支持。

基本用法

要将模板的一部分传送到 DOM 的另一部分,你可以将其包装在 Livewire 的 @teleport 指令中。

下面是一个使用 @teleport 渲染模态对话框内容的示例,该内容位于页面上 <body> 元素的末尾

<div>
<!-- Modal -->
<div x-data="{ open: false }">
<button @click="open = ! open">Toggle Modal</button>
 
@teleport('body')
<div x-show="open">
Modal contents...
</div>
@endteleport
</div>
</div>

@teleport 选择器可以是你通常会传递给诸如 document.querySelector() 之类内容的任何字符串。

你可以通过查阅 MDN 文档 了解有关 document.querySelector() 的更多信息。

现在,当上述 Livewire 模板在页面上呈现时,模态的内容部分将在 <body> 的末尾呈现

<body>
<!-- ... -->
 
<div x-show="open">
Modal contents...
</div>
</body>
您必须在组件外部传送

Livewire 仅支持将 HTML 传送到组件外部。例如,将模态传送到 <body> 标记是可以的,但将其传送到组件内的另一个元素将不起作用。

传送仅适用于单个根元素

确保在 @teleport 语句中仅包含一个根元素。