Vue 插槽 默认插槽 具名插槽 作用域插槽
Vue 插槽 默认插槽 具名插槽 作用域插槽
插槽的作用:
父组件向子组件的指定位置插入一段html. 也是一种组件间通信方式,适用于父传子
定义插槽内容:将内容写在组件标签体中
定义插槽默认内容: 将默认内容写在插槽标签体中
定义插槽内容展示位置:
默认插槽:在组件中将slot标签写你想要展示的位置
具名插槽:在组件标签体中给元素添加slot属性,值为对应插槽名; 在组件slot标签添加对应name属性即可
作用域插槽: 插槽的定义者给插槽的使用者传递数据。template+scope | slot+v-bind
案例:默认插槽
App.vue
<template>
<div id="app">
<TodoHeader >
<input type="text" placeholder="默认插槽来个文本框">
</TodoHeader>
</div>
</template>
<script>
import TodoHeader from "./components/TodoHeader.vue";
export default {
name: "App",
components: { TodoHeader },
};
</script>
TopHeader.vue
<template>
<h1 class="header">
<slot> 默认插槽,插槽没有内容时随便展示点什么。。。。 </slot>
</h1>
</template>
<script>
export default {};
</script>
案例:具名插槽
app.vue
<template>
<div id="app">
<TodoHeader >
<input type="text" placeholder="默认插槽来个文本框">
<div slot="footer">footer content</div>
<div slot="header">header content</div>
</TodoHeader>
</div>
</template>
<script>
import TodoHeader from "./components/TodoHeader.vue";
export default {
name: "App",
components: { TodoHeader },
};
</script>
TopHeader.vue
<template>
<div class="con">
<div class="header">
头部
<slot name="header">
默认插槽,插槽没有内容时随便展示点什么。。。。
</slot>
</div>
<div class="center">
默认插槽
<div>
<slot>插槽没有内容时随便展示点什么。。。。 </slot>
</div>
</div>
<div class="footer">
尾部
<slot name="footer">
插槽没有内容时随便展示点什么。。。。
</slot>
</div>
</div>
</template>
<script>
export default {};
</script>
<style scoped>
.con {
width: 800px;
/* height: 50px; */
font-size: 16px;
padding: 10px;
box-sizing: border-box;
display: flex;
flex-direction: column;
gap: 10px;
}
.header {
background: lightseagreen;
}
.center {
background: lightskyblue;
}
.footer {
background: lightpink;
}
</style>
作用域插槽
app.vue
<template>
<div id="app">
<ScopeSlot>
<template slot-scope="dataByScopeSlot">
<ul>
<li v-for="(item,index) in dataByScopeSlot.myData" :key="index">
{{item}}
</li>
</ul>
</template>
</ScopeSlot>
</div>
</template>
<script>
import ScopeSlot from "./components/ScopeSlot.vue";
export default {
name: "App",
components: { ScopeSlot }
};
</script>
ScopeSlot.vue
<template>
<div class="con">
<slot :myData="dataArr"></slot>
</div>
</template>
<script>
export default {
data:()=>({dataArr:[1,2,3]})
};
</script>
<style scoped>
.con {
width: 800px;
font-size: 16px;
padding: 10px;
box-sizing: border-box;
display: flex;
flex-direction: column;
gap: 10px;
}
.header {
background: lightseagreen;
}
.center {
background: lightskyblue;
}
.footer {
background: lightpink;
}
</style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-02-13 联系人与客户多对一配置&联系人列表&分页查询联系人
2019-02-13 CRM:异步加载下拉列表,三个列表出现同样的下拉框