vue组件深入介绍之插槽

了解插槽之前请先了解vue组件基础及注册

Vue2官网介绍

Vue3官网介绍

1、vue2插槽介绍

在2.6.0中,具名插槽和作用域插槽引入了一个新的统一语法(v-slot指令)。它将取代slot和slot-scope;

Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 < slot > 元素作为承载分发内容的出口。

允许父组件更改子组件模板内容,例如:

//父组件
 Your Profile
//子组件NavigationLink.vue
 
//渲染结果
 Your Profile

如果 < navigation-link > 的 template 中没有包含一个 < slot > 元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃。

/*子组件*/
/*父组件*/
  Your Profilea标签
//渲染结果,a标签中间无任何内容被渲染,span以及文本均被抛弃

2、vue3插槽介绍

//子组件
//父组件
/*渲染结果*/

插槽内容可以是任意合法的模板内容,不局限于文本;可以传入多个元素,甚至是组件

3、插槽渲染作用域

vue2和vue3插槽作用域须知如下:

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

/*父组件,父组件中的msg属性在父组件和子组件中均可渲染,但在MyButton子组件中无法获取msg的值,只有使用props传值后才可获取到*/

4、插槽的默认值设置

4.1、Vue2参考插槽——后备内容

/*vue2子组件设置默认值*/

4.2、Vue3参考插槽——默认内容

/*vue3子组件设置默认值*/
/*vue3 父组件*/