Vue实现了一套内容分发的API,将
1.内容分发
例如有一个模板为以下格式的Card.vue的组件
<template>
<div>
<h1>{{ title }}</h1>
<div>
<slot></slot>
</div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: ''
},
content: {
type: String,
default: ''
}
}
}
</script>
当card.vue在其他页面调用时,card见的内容将替换slot。
<template>
<div>
<card>
自定义内容
</card>
</div>
</template>
<script>
import Card from 'Card.vue'
export default {
components: {
Card
}
}
</script>
2.作用域
父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。父级模板无法访问子组件中的属性。
3.插槽默认值
在没有提供内容时,为插槽设置默认值是很有用的。
<template>
<div>
<h1>{{ title }}</h1>
<div>
<slot>插槽默认值</slot>
</div>
</div>
</template>
4.命名插槽
有时候组件内部 需要多个插槽,为了区分不同的插槽进行分发,需要slot额外的属性来标识,对于这样的情况slot元素有一个特殊的name属性。
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
不带name的slot出口带有隐含的名字default