您的位置:首页 > Web前端 > Vue.js

vue 插槽

2020-07-07 17:27 106 查看

简介 


插槽就是子组件中提供给父组件的一个占位符,用<slot></slot>表示,父组件可以在这个占位符中填充任何模板内容,如html、组件等,填充的内容会替换子组件的<slot></slot>标签

没有使用插槽的:

[code]**没有使用插槽的:**
//子组件
<template>
<div class="">
</div>
</template>
//父组件
<template lang="html">
<div class="">
<New>
<div class="">
插槽
</div>
</New>
</div>
</template>

什么内容都没有

使用插槽的:

[code]//子组件
<template>
<div class="">
<slot></slot>
</div>
</template>
//父组件
<template lang="html">
<div class="">
<New>
<div class="">
插槽
</div>
</New>
</div>
</template>

概述:如果子组件中没有使用插槽,父组件往子组件中填充任何内容都会被抛弃 

具名插槽

具名插槽其实就是给插槽取个名字。一个子组件可以放多个插槽,而且可以放在不同的地方,而父组件填充内容时,可以根据这个名字把内容填充到对应插槽中。

[code]//子组件
<template>
<div class="">
<slot></slot>
<div class="header">
<slot name="header"></slot>
</div>
<div class="footer">
<slot name="footer"></slot>
</div>
</div>
</template>
//父组件
<template>
<div class="aa">
<New>
<div class="">
插槽
</div>
//方式一
<template v-slot:header>
<div class="">
header
</div>
</template>
//方式二
<template #header>
<div class="">
header
</div>
</template>
<template v-slot:footer>
<div class="">
footer
</div>
</template>
</New>
</div>
</template>

注:

1.  父级的填充内容如果指定到子组件的没有对应名字插槽,那么该内容不会被填充到默认插槽中。

2.  如果子组件没有默认插槽,而父级的填充内容指定到默认插槽中,那么该内容就“不会”填充到子组件的任何一个插槽中。

3.  如果子组件有多个默认插槽,而父组件所有指定到默认插槽的填充内容,将“” “全都”填充到子组件的每个默认插槽中。

作用域插槽

作用域插槽其实就是带数据的插槽,即带参数的插槽,简单的来说就是子组件提供给父组件的参数,该参数仅限于插槽中使用,父组件可根据子组件传过来的插槽数据来进行不同的方式展现和填充插槽内容。

使用方法:

  1. 子组件存放一个带数据的插槽: mylist和title是子组件传给父组件的参数
  2. 父组件通过 “slot-scope” 来接收子组件传过来的插槽数据,再根据插槽数据来填充插槽的内容
  3. 展现的效果:
  4. 常用场景(以下为常用的情况之一)
  5.  如果子组件中的某一部分的数据,每个父组件都会有自己的一套对该数据的不同的呈现方式,这时就需要用到作用域插槽。

绑定在 元素上的特性被称为插槽 prop。

[code]//父组件
<template>
<div class="aa">
<New>
<template v-slot:default='slotprop'>
{{slotprop.data.msg}}
</template>
</New>
</div>
</template>
//子组件
<template>
<div class="">
<slot :data="result"></slot>
</div>
</template>

<script>
export default {
data: function () {
return {
result: {
msg: '123'
}
}
}
}
</script>

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: