Vue—插槽

一、为什么会有插槽

  • 在父组件中向子组件中传递定制化的内容

二、什么是插槽?

1. 何为插槽

  • 见名知意,插槽就是一个可以将任何东西插入到当前页面的结构。

2. 插槽分类

  • (1)匿名插槽:没有名字的插槽
  • (2)具名插槽:有名字(name属性)的插槽
  • (3)作用域插槽:子组件中的数据只能子组件访问到,但是我们的插槽往往定义在父组件中,这个时候就需要作用域插槽来打通他们之间的关系,然后就能在父组件中愉快的使用子组件的数据了

三、怎么用插槽?

1. 匿名插槽

a. 在子组件中定义插槽

  • 通过<slot></slot>即slot组件在子组件中需要插槽的地方定义一个插槽

image.png

b. 在父组件中填充插槽

  • (1)直接在父组件注册过的子组件中写插槽里面的内容
  • (2)在父组件中通过<template #default><template>来将内容插入到子组件中,这里的default就是默认插槽的意思

image.png image.png

2. 具名插槽

a. 在子组件中定义插槽

  • 与匿名插槽相同,通过Vue内置的slot组件定义插槽,不同之处在于具名插槽是有名字的,会有一个name属性定义这个插槽的名字,写出来就是这样子:<slot name="插槽名"></slot>

image.png

b. 在父组件中填充插槽

  • 通过<template v-slot:插槽名></template>来将内容插入到子组件对应的插槽中,还可以通过#l来代替v-slot:

image.png

3. 作用域插槽

  • 作用域即一套查找变量的规则,父组件有自己的作用域,只能在自己的作用域中查找自己定义过的变量,子组件也一样,我们使用插槽一般情况是在父组件中填充了一个插槽,如果想要取到子组件中的数据,那就要使用作用域插槽了,接下来看如何使用作用域插槽

a. 子组件

  • 通过v-bind传递数据,插槽中通过v-bind绑定的属性叫做插槽prop

image.png

b. 父组件

  • (1)直接获取

image.png

  • (2)通过解构赋值获取

image.png

四、一些小细节

  • 可以在子组件插槽中定义默认显示内容后备内容),当父组件中未填充插槽时显示后备内容,一旦父组件中有填充插槽,将显示父组件中填充的新内容

猜你喜欢

转载自juejin.im/post/7035255990454845454