插槽的基本使用(slot)

插槽的基本使用(slot)
组件的插槽:

组件的插槽也是为了让我们封装的组件更加具有扩展性。

让使用者可以决定组件内部的一些内容到底展示什么。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>slot基本使用</title>
</head>
<body>
<div id="app">
  <cpn><button>按钮一</button></cpn>
  <cpn><span>插槽二</span></cpn>
  <cpn><i>我自定义标签插槽</i></cpn>
  <cpn></cpn>
</div>
<template id="cpn">
  <div>
    <h2>我是标题</h2>
    <p>我是组件</p>
    <slot><p>我是默认值,如果插槽没有添加,使用默认值</p></slot>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    },
    components: {
      cpn: {
        template: '#cpn'
      }
    }
  });
</script>
</body>
</html>

插槽预留位置,为日后扩展做准备,直接在模板中使用slot标签即可。

插槽可以有默认值,直接在slot里设置组件,可以是自定义组件,也可以是系统标签。使用时直接在自定义标签里填充,扩展内容(可以是另外一个组件,套娃)。如果没有填充,使用默认值填充。

插槽只有一个slot标签,不意味着只能在组件标签里填充一个html标签,可以填充任意个,整体用来替换插槽。

<div id="app">
  <!--系统标签-->
  <cpn>
    <button>按钮一</button>
  </cpn>
  <!--未定义标签-->
  <cpn></cpn>
  <!--自定义标签-->
  <cpn><i>我自定义标签插槽</i></cpn>
  <!--多个标签-->
  <cpn>
    <div>
      <p>p1</p>
      <p>p2</p>
    </div>
  </cpn>
</div>
具名插槽
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>具名插槽</title>
</head>
<body>
<div id="app">
  <cpn>
    <button slot="left">左边替换成按钮</button>
    <p slot="center">中间替换成p标签</p>
    <h2 slot="right">右边替换成h2标签</h2>
  </cpn>
</div>
<template id="cpn">
  <div>
    <slot name="left"><span>我是左边的</span></slot>
    <slot name="center"><span>我是中间的</span></slot>
    <slot name="right"><span>我是右边的</span></slot>
    <slot><span>没有名字的</span></slot>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    },
    components: {
      cpn: {
        template: '#cpn'
      }
    }
  });
</script>
</body>
</html>

模板里可以预留多个插槽,而非只有一个。

每个插槽可以取一个具体名字,也可以不取,如果不取,在组件里使用插槽,所有未取名字都会被替换。

我们可以给需要区域替换的插槽取名字,然后在组件使用时,具体标签/子组件里使用slot属性绑定插槽名字,就可以实现局部替换。

默认值/替换值如下:

<div>
  <slot name="left"><span>我是左边的</span></slot>
  <slot name="center"><span>我是中间的</span></slot>
  <slot name="right"><span>我是右边的</span></slot>
  <slot><span>没有名字的</span></slot>
</div>
<cpn>
  <button slot="left">左边替换成按钮</button>
  <p slot="center">中间替换成p标签</p>
  <h2 slot="right">右边替换成h2标签</h2>
</cpn>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值