06-Vue插槽Slot

slot基本使用

了解了为什么用slot,我们再来谈谈如何使用slot?

  • 在子组件中,使用特殊的元素<slot>就可以为子组件开启一个插槽。
  • 该插槽插入什么内容取决于父组件如何使用。

在这里插入图片描述

可以给定插槽默认值 , 如果没有传值 则使用默认值

 <slot>
      <button>我是插槽</button>
 </slot> <!--可以给定插槽默认值 , 如果没有传值 则使用默认值-->

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
<div id="app">
  <cpn>
    <button>按钮</button>
  </cpn> <!--使用插槽-->
  <cpn><span>span</span></cpn>
  <cpn><i>嘿嘿</i></cpn>
  <cpn></cpn><!--没有传值则使用默认值-->
</div>

<template id="cpn">
  <div>
    <h2>我是标题</h2>
    <p>我是内容</p>
    <!--    <slot></slot> &lt;!&ndash;插槽 令组件具有扩展性&ndash;&gt;-->
    <slot>
      <button>我是插槽</button>
    </slot> <!--可以给定插槽默认值 , 如果没有传值 则使用默认值-->
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    components: {
      cpn: {
        template: '#cpn',
      },

    }

  })
</script>
</body>

</html>

具名插槽slot

当子组件的功能复杂时,子组件的插槽可能并非是一个。

  • 比如我们封装一个导航栏的子组件,可能就需要三个插槽,分别代表左边、中间、右边。
  • 那么,外面在给插槽插入内容时,如何区分插入的是哪一个呢?
  • 这个时候,我们就需要给插槽起一个名字

如何使用具名插槽呢?
非常简单,只要给slot元素一个name属性即可

<slot name='myslot'></slot>

我们来给出一个案例:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
<div id="app">
  <!--  会替换具有对应name的slot-->
  <cpn><span slot="center">标题</span></cpn>
</div>


<template id="cpn">
  <div>
    <h2>我是标题</h2>
    <p>我是内容</p>

    <!--多个slot-->
    <slot name="left">
      <button>左边</button>
    </slot>
    <slot name="center">
      <button>中间</button>
    </slot>
    <slot name="right">
      <button>右边</button>
    </slot>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    components: {
      cpn: {
        template: '#cpn',
      },

    }

  })
</script>
</body>

</html>

作用域插槽

作用域插槽是slot一个比较难理解的点,而且官方文档说的又有点不清晰。
这里,我们用一句话对其做一个总结,然后我们在后续的案例中来体会:

简单来说 就是数据是由子组件提供的,而这个组件再不同的界面使用需要以不同的方式展现,这个时候就可以利用作用域插槽了

在这里插入图片描述
在父组件使用我们的子组件时,从子组件中拿到数据:
我们通过<template slot-scope="slot">获取到movies属性
在通过movies.data就可以获取到刚才我们传入的data了

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值