以前,Vue组件总是一个个的空标签的形式出现的,那么如果说组件标签里面有内容,那么要获取这些内容要怎么办呢?
Vue提供了一个解决方案:slot内容分发,其作用就是用来获取组件中的原内容(就是组件标签内部的内容)。
用法分为两种情况:当组件内的原内容结构比较简单的时候可以使用单一slot,当原内容结构比较复杂的时候使用具名slot;
单一slot:在组件模板合适的位置插入slot组件即可;
你好,2018!
{{house.price}}
没有原内容
具名slot:
给你想获取的原内容部分指定一个属性`slot = "值"`,然后在在组件的模板中的合适位置插入一个slot元素,设定`name= "值"`即可。例如:
哈哈
- 111
- 222
- 333
{{clothes}}
作用域插槽slot:
首先要将子组件的数据传递给子组件模板中的slot插槽(v-bind绑定属性):
然后在父组件模板中具有特殊特性 slot-scope的 元素必须存在,表示它是作用域插槽的模板(
也就是说被元素包围内容就是slot的模板,在渲染的时候slot就会被渲染成该模板内容),slot-scope的值将被当作一个临时的变量名,此变量用来接收从子组件传递过来的props对象(就是一个数据对象);
{{greeting}}
{{greeting}}
{{props.heheda}}
{{props.materials}}
在 2.5.0+,slot-scope 能被用在任意元素或组件中而不再局限于
了
{{ props.text }}
列表组件的模板:
注意:在分析组件+slot具体出来的内容是什么的时候,可以先将组件内部的原内容给剥离出来,在此基础上进行分析在没有原内容的时候组件将会是什么样子,