使用vue的slot插槽做母板组件

本文介绍了如何使用 Vue 的 Slot 插槽功能创建母板组件,以提升后台管理页面的开发效率。通过实例展示了如何定义和使用 Slot,实现布局的复用,减少代码复制,提高代码的复用性和页面开发的便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

母板组件是啥?

母板跟模板差不多,就是将一些重用性较高的页面结构抽离出来,封装到一个独立的组件里,以便于在各个项目中使用。比如后台管理,经典的头部,尾部,侧边栏与主要内容区域;我们就可以把这个结构封装成一个母板组件,今后只要写后台管理类的项目,就可以直接使用。下面具体来实现一下。

实现一个后台管理的母板组件

假设我们需要实现的是下面这张图的效果:

母板组件命名为layer.vue;为了快速实现这个布局效果,我直接使用element UI来做,其实用什么UI都无所谓,因为我们抽离出来的是一个布局结构,代码大概是这样的:

<el-container>
  <el-header>Header</el-header>
  <el-container>
    <el-aside width="200px">Aside</el-aside>
    <el-container>
      <el-main>Main</el-main>
      <el-footer>Footer</el-footer>
    </el-container>
  </el-container>
</el-container>

这样很快就可以实现一个后台管理的布局了,但是,如果以后,你又要写同样一个布局,是不是又得复制一份这样的代码呢?而且很可能每个区块里面都有很多其他的子组件在里面,比如像下面这样的代码:

<el-container>
  <el-header>
      <other-child-component></other-child-component>
    </el-header>
  <el-container>
    <el-aside width="200px">
              <el-menu></el-menu>
             <el-tree></el-tree>
        </el-aside>
    <el-container>
      <el-main>
             <el-breadcrumb separator="/"></el-breadcrumb>
              <el-carousel></el-carousel>
                <el-tab></el-tab>
            </el-main>
      <el-footer>Footer</el-footer>
    </el-container>
  </el-container>
</el-container>

我们如果仅仅只是为了需要布局结构,而把所有的代码copy一遍,然后删除掉无用的组件和文字,岂不是太浪费时间了。接下来我们用vue的slot来重构一下之前的代码:
layer.vue

<el-container>
  <el-header>
        <slot name="header"></slot>        
    </el-header>
  <el-container>
    <el-aside width="200px">
            <slot name="aside"></slot>
        </el-aside>
    <el-container>
      <el-main>
                <slot name="main"></slot>
            </el-main>
      <el-footer>
                <slot name="footer"></slot>
            </el-footer>
    </el-container>
  </el-container>
</el-container>

我们把第一个例子的代码,用slot替换了所有的文字;在当前母板里,slot相当于是提前占据区域的一块空间,等待后面使用这个slot的组件,填充具体内容;接下来,我们同样来实现例子二的效果,代码如下:
slot.vue

import layer from 'layer.vue'  
export default {
...
components: {
  layer
}
}

<layer>
    <div slot="footer">Footer</div>
    <other-child-component slot="header"></other-child-component>
    <div slot="aside">
           <el-menu></el-menu>
             <el-tree></el-tree>
    </div>
    <div slot="main">
            <el-breadcrumb separator="/"></el-breadcrumb>
            <el-carousel></el-carousel>
            <el-tab></el-tab>
    </div>
</layer>

可以看到,我们在slot.vue里面引入了layer母板组件,可以不用管div的顺序,在slot.vue里面,我们将footer放到了第一个div里面,这不会影响layer母板组件的布局效果;唯一影响具体效果的只有slot属性,slot.vue里元素的slot属性的值对应layer母板组件里slot标签的name属性的值,然后将内容插入到layer母板组件里。
除了不用管div的顺序以外,在母板组件里,无需关心用的是element UI还是bootstrap之类的UI库,因为只需要改变母板组件的class类名(在当前这种情况,需要将自定义标签替换为div等html自带的标签)就行,无需改变结构;
以后所有的项目,如果是同样的布局结构,就无需重复写代码了,直接在那个组件里引入layer.vue就ok了,还是节省了不少时间的。 同理,在项目中,其他高频出现的页面组件,也可以试着抽离出一个母板组件,简化组件里代码的复杂度,提高代码的复用性。
利用vue的slot插槽将“布局”封装成为一种组件,为大规模页面开发带来了非常大的便利性。从页面布局的角度我们称之为母板,但如果从布局入手又可以得到各种容器类组件,例如:Panel、Tabs、SideBar等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊哈前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值