组件插槽与作用域插槽
1、父组件向子组件传递内容
<div id="app">
<alert-box>警示框</alert-box>
<alert-box>有一个警告</alert-box>
<alert-box></alert-box> <!-- 没有内容 显示默认内容 -->
</div>
<script src="../js/vue.js"></script>
<script>
Vue.component('alert-box', {
template: `<div><slot>默认内容</slot></div>`
})
var vm = new Vue({
el: '#app'
})
</script>

2、具名插槽 slot与template都是固定的,是Vue提供的API
<div id="app">
<item-one>
<p slot="header">头部信息一</p>
<p slot="header">头部信息二</p>
<p>主体</p>
<p slot="footer">底部信息一</p>
<p slot="footer">底部信息二</p>
</item-one>
<div>-------------------------</div>
<item-one>
<template slot="header">
<p>头部信息一</p>
<p>头部信息二</p>
</template>
<p>主体</p>
<p>主体</p>
<template slot="footer">
<p>底部信息一</p>
<p>底部信息二</p>
</template>
</item-one>
</div>
<script src="../js/vue.js"></script>
<script>
Vue.component('item-one', {
template: `<div>
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>`
})
var vm = new Vue({
el: '#app'
})
</script>
3、作用域插槽
<div id="app">
<item-one :list="list">
<template slot-scope="slotProps">
<strong v-if="slotProps.item.id==2" class="current">{{slotProps.item.uname}}</strong>
<span v-else>{{slotProps.item.uname}}</span>
</template>
</item-one>
</div>
<script src="../js/vue.js"></script>
<script>
Vue.component('item-one', {
props: ['list'],
template: `<div>
<ul>
<li :key="item.id" v-for="item in list">
<slot :item="item">{{item.uname}}</slot>
</li>
</ul>
</div>`
})
var vm = new Vue({
el: '#app',
data: {
list: [{
id: '1',
uname: 'apple'
},{
id: '2',
uname: 'banana'
},{
id: '3',
uname: 'orange'
}]
}
})
</script>

浙公网安备 33010602011771号