为什么使用slot?slot的基本使用
nav-bar导航栏组件,分为三部分,左中右,三个slot,预留空间
<div id="app">
<cpn><button>按钮</button></cpn>
<cpn><span>span</span></cpn>
<cpn><h2>h2</h2></cpn>
</div>
<template id="cpn">
<div>
<h1>我是组件</h1>
<p>我是p标签</p>
<slot><button>按钮</button></slot> <!--默认值button,不传值显示-->
</div>
</template>
<script>
const vm = new Vue({
el: '#app',
data: {},
components: {
cpn: {
template: '#cpn',
}
}
})
</script>
一个slot , cpn中的所有标签全部替换
具名插槽的使用
<div id="app">
<!--替换中间的插槽-->
<cpn><span slot="center">标题</span></cpn>
<cpn><button slot="right">按钮</button></cpn>
</div>
<template id="cpn">
<div>
<slot name="left"><span>左边</span></slot>
<slot name="center"><span>中间</span></slot>
<slot name="right"><span>右边</span></slot>
</div>
</template>
<script>
const vm = new Vue({
el: '#app',
data: {},
components: {
cpn: {
template: '#cpn',
}
}
})
</script>
编译作用域
父找父,子找子
父组件模板里的所有东西都会在父级作用域内编译,子组件模板的所有东西都会在子级作用域内编译
插槽作用域 ?
难度,不清晰
- 父组件替换插槽的标签,但是内容由子组件提供
不清楚
<div id="app">
<cpn></cpn>
<!--目的是获取子组件中的pLanguages-->
<cpn>
<template slot-scope="slot">
<span v-for="item in slot.data">{{item}}-</span>
</template>
</cpn>
</div>
<template id="cpn">
<div>
<slot :data="pLanguages">
<ul>
<li v-for="item in pLanguages">{{item}}</li>
</ul>
</slot>
</div>
</template>
<script>
const vm = new Vue({
el: '#app',
data: {},
components: {
cpn: {
template: '#cpn',
data: function () {
return{
pLanguages : [
'js','c++','java','php'
]
}
}
}
}
})
</script>