一、插槽的作用

    插槽主要是为了实现Vue得内容分发的API,他允许开发者在子组件标签中添加内容,并将这些内容渲染出来,这些内容可以是一段字符串,或者一个HTML标签,也可以是父组件中的变量,或是一个子组件。

    插槽 - 图1

    插槽 - 图2

    插槽 - 图3

    二、编译作用域

    该插槽跟模板的其他地方一样可以访问相同得实例property,而不能访问包着他得子组件的作用域。

    作为一条规则,我们需要记住:父级模板里的所有内容都是在父级作用域中编译,子模板里的所有内容都是在子作用域中编译的。

    父级的数据可以向子组件中传递,并且数据只能通过父组件修改,子组件不允许直接修改父组件传进来的数据,这样会引起vue报错。

    三、后备内容

    有时候我们需要标签有一个默认的内容,我们可以在子组件中提前写上一个标签,并将默认内容写在里面。

    插槽 - 图4

    这样如果我们在子组件标签上没有写内容,button标签上的默认内容就是submit

    如果我们在子组件中未写内容,那么就会显示标签中的默认内容,如果写了,就会渲染我们在子组件标签中写的内容。

    插槽 - 图5

    如果我们在子组件标签中加了内容,就会将button渲染的内容替换成我们添加的内容save

    四、具名插槽

    有时候我们会需要多个插槽,插入不同的内容,这是我们可以使用标签的name属性,给slot标签起一个名字。

    对于一个未起名的标签出口会带有隐式的名字”default”。

    这是一个父组件的结构,我们在header、main、footer三个结构中预留了三个具名插槽

    插槽 - 图6

    在HTML结构中,我们在父组件中的添加内容,不同具名插槽的内容放在一个