vue2.6之后的 v-slot插槽

1、背景

在 vue2.6.0 中,引入了v-slot 指令,取代了 slot 和 slot-scope 属性,
并且v-slot只能使用在template上。

2、作用

在引入组件时,通过在template元素上使用v-slot实现了内容的封装
而在使用时则将 <slot>元素作为封装元素的出口。

3、具名插槽的用法示例

一个不带 name 的 出口会带有隐含的名字“default”,

具名插槽的缩写 例: v-slot: header 缩写为 #header,注意#后面必须有值,如果是默认的插槽,缩写为#default
默认插槽,不写<template v-slot:default ></template>,即不包括在template内的就是默认插槽的内容

//定义组件A,引入插槽
<div class="container">
  <header>
    <slot name="header"></slot>
  </header>
  <main>
    <slot></slot>      // 这里没定义name,那其name就是default.
  </main>
  <footer>
    <slot name="footer"></slot>
  </footer>
</div>

// 在其它组件内,引入组件A时,定义slot插槽的内容,引入进写法如下
<A>
  <template #header>
    <h1>Here might be a page title</h1>  // 这个插槽内是html
  </template>
    
  // 这里没有包含在template,其默认的就是name为default的slot
  // <template v-slot:default>   // 这个可以省略
      <p>A paragraph for the main content.</p>   
      <p>And another one.</p>
  //</template>   // 这个可以省略

  <template v-slot:footer>
       <B></B>                  // 这个插槽内是另一个组件B
  </template>
</A>
4、插槽的默认内容

在slot中写入内容,则可作为引入组件时,若未设置相应插槽时,该插槽的默认内容

// 定义一个 <submit-button> 组件
<button type="submit">
  <slot>Submit</slot>
</button>

//引入组件,没有定义插槽内容,则使用slot中的默认内容,渲染为
//<button type="submit"> Submit </button>
<submit-button></submit-button>   

//引入组件,定义插槽内容,则替换默认内容,渲染为
// <button type="submit"> Save </button>
<submit-button>  Save </submit-button>
5、在父组件调用子组件,引入子组件时的插槽处,使用子组件的数据

在父组件内定义插槽时,插槽内可以访问到父组件内的数据,无法访问到子组件内的数据。

而在子组件为插槽定义默认内容时,只可以访问到子组件内的数据,如果想访问父组件内的数据时,当然可以通过父组件传递给子组件数据的方法进行访问。

父级模板里的所有内容都是在父级作用域中编译的;
子模板里的所有内容都是在子作用域中编译的。

  • 在子组件的slot处v-bind绑定属性
  • 在你组件的template中定义slot时,使用 v-slot:插槽名 = 插槽处绑定的属性,即可
// 子组件 <current-user>
<span>
  <slot v-bind:user="user">
    {{ user.lastName }}
  </slot>
</span>

// 在父组件内引入子组件 <current-user>,只有默认插槽时,缩写为
<current-user v-slot:default="slotProps">
  {{ slotProps.user.firstName }}
</current-user>

// 其实完整写法如下:(引入多个插槽时,一一对应即可)
<current-user>
  // <template #default="slotProps">     // 这里把v-slot:缩写为#,
  <template v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
  </template>
</current-user>

参考链接:https://cn.vuejs.org/v2/guide/components-slots.html#%E6%8F%92%E6%A7%BD%E5%86%85%E5%AE%B9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值