Vue 技巧之控制父类的 slot

2020-06-16 06:56:13易采站长站整理
layout
组件中。 我们的状态必须保留在我们正在动态渲染的
Page
组件内。

因此,我们必须提升整个

Page
组件才能提升状态。当前,我们的
Page
组件是
Layout
组件的子组件:


<template>
<div>
<FullPageError />
<ActionBar />
<Page />
</div>
</template>

解除它需要我们将其翻转,并使

Layout
组件成为
Page
组件的子组件。 我们的
Page
组件看起来像这样:


<template>
<Layout>
<!-- Page-specific content -->
</Layout>
</template>

现在,我们的

Layout
组件将看起来像这样,我们可以在其中使用插槽插入页面内容:


<template>
<div>
<FullPageError />
<ActionBar />
<slot />
</div>
</template>

但这还不能让我们自定义任何内容。 我们必须在

Layout
组件中添加一些命名的插槽,以便我们可以传递应放置在
ActionBar
中的内容。

最简单的方法是使用一个插槽来完全替代

ActionBar
组件:


<template>
<div>
<FullPageError />
<slot name="actionbar">
<ActionBar />
</slot>
<slot />
</div>
</template>

这样,如果你不指定

“actionbar”
插槽,默认使用
ActionBar
组件。 但我们可以使用自己的自定义
ActionBar
配置覆盖此插槽:


<template>
<Layout>
<template #actionbar>
<ActionBar>
<!-- Custom content that goes into the action bar -->
</ActionBar>
</template>
<!-- Page-specific content -->
</Layout>
</template>

对我来说,这是一种理想的处理方式,但是它确实需要我们重构页面的布局方式。 对于界面复杂点的,这可能是一项艰巨的任务。

简化一下

当我们第一次定义问题时: