vue solt(插槽)用法小结

305 阅读1分钟

之前看vue官方文档,对slot插槽分发理解模糊,最近项目中使用了slot,便梳理总结了一下,如下为我的理解:

一般vue的slot用法有两种,一种是单独使用,一种是具名solt

1.单独使用:

  如下,如果子组件中没有使用slot,则父组件中的文本不会显示:

  父组件代码:

<template>
  <div class="home">
    我是父组件
    <Child>我调用了子组件</Child>
  </div>
</template>
<script>
import Child from "./Child.vue";
export default {
  name: "Home",
  components: {
    Child,
  },
};
</script>

子组件代码:

<template>
  <div>我是子组件</div>
</template>

<script>
export default {

};
</script>

<style>
</style>

运行现象:

QQ图片20220603104908.png

当子组件使用slot分发时,具体代码和现象如下:

子组件:

<template>
  <div>
    <div>我是子组件</div>
    <slot></slot>
  </div>
</template>

<script>
export default {};
</script>

<style>
</style>

运行现象:

QQ图片20220603105246.png

2.具名slot

  元素在子组件中定义属性name的值,与父组件中的slot值相呼应,则分发成功;否则,分发失败

如下:

父组件:

<template>
  <div class="home">
    我是父组件
    <Child>
      <div slot="header">我是头部</div>
      <div slot="section">我是主体</div>
      <div slot="footer">我是底部</div>
    </Child>
  </div>
</template>

<script>
import Child from "./Child.vue";
export default {
  name: "Home",
  components: {
    Child,
  },
};
</script>

子组件:

<template>
  <div>
    <div>我是子组件</div>
    <slot name="header"></slot>
    <slot name="section"></slot>
    <slot name="footer"></slot>
  </div>
</template>

<script>
export default {};
</script>

<style>
</style>

运行现象: QQ图片20220603110030.png 这里说一下多个具名插槽的使用 多个具名插槽,插槽的位置不是使用插槽的位置而定的,是在定义的时候的位置来替换的

使用场景

  • 通过插槽可以让用户可以拓展组件,去更好地复用组件和对其做定制化处理

  • 如果父组件在使用到一个复用组件的时候,获取这个组件在不同地方有少量的更改,如果去重写组件是一件不明智的事情

  • 通过slot插槽向组件内部指定位置传递内容,完成这个复用组件在不同场景的应用

  • 比如布局组件、表格列、下拉选、弹框显示内容等