Vue之slot分发内容

在单页面应用中,例如头部header组件,在不同的页面显示的可能内容不同,例如在下列选择城市和搜索城市页面的header组件内容便显示的不一样,图片如下:
一、
这里写图片描述

二、
这里写图片描述

这里用slot十分合适,header组件仅仅定义大小和背景,里面不添加任何内容通过slot来分发,在调用header的A组件里面使用slot定义分发该页面对应的内容,然后当A组件在页面中显示时,header组件里显示A组件里slot分发的内容,如下:
一、选择城市组件select.vue:

template:

<headVue>
        <span slot="logo-name">饿了么</span>
        <img src="../../common/img/head-logo.png" slot="logo">
</headVue>

二、搜索地址组件research.vue:
template:

<headVue>
        <router-link to="/select" slot="back">
          <span><</span>
        </router-link>
        <span slot="logo-name" class="research">搜索</span>
</headVue>

三,header组件里通过slot的name属性来显示相应内容:
template:

<div class="head-wrap">
    <slot name="logo-name"></slot>
    <slot name="logo"></slot>
    <slot name="back"></slot>
    <slot name="research"></slot>
</div>

上面在header组件里写四个slot并给不同的name是为了看的更清楚,其实不必如此,因为我们两个组件各自内部只用到了两个slot来分发内容,所以header组件里只需要写两个slot即可。

这里说明一下,当前组件A加载(或显示)在网页上时,A组件内slot分发的内容才会才header组件里显示,而组件A没有被当前网页显示时,A组件内slot分发的内容自然也不会在header组件里显示,所以上面代码可以稍加简化:
一、选择城市组件select.vue:

template:

<headVue>
        <span slot="A">饿了么</span>
        <img src="../../common/img/head-logo.png" slot="B">
</headVue>

二、搜索地址组件research.vue:
template:

<headVue>
        <router-link to="/select" slot="A">
          <span><</span>
        </router-link>
        <span slot="B" class="research">搜索</span>
</headVue>

三,header组件里通过slot的name属性来显示相应内容:
template:

<div class="head-wrap">
    <slot name="A"></slot>
    <slot name="B"></slot>
</div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值