vue作用域插槽slot-scope详解

vue的插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示、以及怎样显示由父组件来决定。 实际上,一个slot最核心的两个问题这里就点出来了,是显示不显示怎样显示

了解vue的同学都知道插槽分为单个插槽,具名插槽,还有作用域插槽,前两种比较简单这里就不赘述了,今天的重点是讨论作用域插槽。

简单来说,前两种插槽的内容和样式皆由父组件决定,也就是说显示什么内容和怎样显示都由父组件决定;但是第三种插槽就不同了,作用域插槽的样式由父组件决定,内容却由子组件控制。简单来说:前两种插槽不能绑定数据,作用域插槽是一个带绑定数据的插槽。

由于Vue官方在2.6版本以后改变了插槽的书写方式,所以,我们这里区分2.6版本之前的写法和2.6版本以后的写法:

我们先来看2.6版本之前的写法:

// 父组件

 
//子组件

 

再来看2.6版本之后的写法,子组件的写法不用变,和原来一模一样,来看父组件的写法:

// 父组件

 

我们可以清晰的看到,在子组件中有个插槽slot通过v-bind绑定了一个值item,在父组件中引用了子组件child,child标签里面可以看到作用域插槽template,此时slot-scope就是一个对象,这个对象是由子组件的插槽slot所绑定的值所组成的一个对象,比如在这里slot-scope = {item},这里的item来自子组件,而这里slot-scope的值是a,所以就有了下面的

说到这里,想必大家都应该明白了作用域插槽了吧,简单来说就一句话:可以绑定数据的插槽,显示内容完全由子组件决定,数据来自子组件。

如果绑定数据太多,而你不需要全都用到的时候可以使用es6的对象解构,关于对象解构比较简单,笔者在此就不再赘述了!

你可能感兴趣的:(vue)