vue中的插槽v-slot
今天也是第一次真正用到过插槽这个知识点,下面就大概说下用法
先来看看插槽模板:
子组件(在子组件中定义slot标签,添加name属性)
<template>
<div>
<slot name="header"></slot> //注意这里的name属性
</div>
</template>
父组件(在父组件中使用template并写入对应的slot值来指定该内容在子组件中现实的位置)
跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。例如 v-slot:header 可以被重写为 #header,要么都用v-slot: 要么都用缩写#,不要混合用,要不然只有最后面的才生效
<template>
<div>
<template #header>
<p>我是name为header的slot</p>
</template>
</div>
</template>
下面就是项目中用到的,直接套上面的模板:
子组件(在子组件中写入slot,slot所在的位置就是父组件要显示的内容)
<!---->
<template>
<div>
<slot :name="'content' + index"></slot>
</div>
</template>
<script>
export default {
name: 'NavTabs',
components: {},
data () {
return {
index: 0
}
},
methods: {
}
}
</script>
<style lang='less' scoped>
</style>
父组件(在父组件引用的子组件中写入想要显示的内容)
<template>
<div class="index-container">
<template v-slot:[slotName]>这里添加要显示的内容</template>
</div>
</template>
<script>
import navTab from '~/components/nav/NavTabs' //引入子组件
export default {
name: 'NewPages',
layout: 'content',
components: {
navTab //子组件名字
},
data () {
return {
slotName: 'content0'
}
},
methods: {
}
}
</script>
<style lang="less" scoped>
</style>
具体其他详细用法也可参考:https://www.cnblogs.com/loveyt/p/9946450.html