首页 > 其他分享 >13:vue3 插槽 slot

13:vue3 插槽 slot

时间:2023-07-07 14:22:06浏览次数:36  
标签:slot 13 vue 插槽 slotProps 内容 vue3 SlotBase

1、插槽基础知识

用Parent.vue,导入SlotBase.vue组件

 1 <template>
 2     <SlotBase>
 3         <div>
 4             <h3>插槽标题</h3>
 5             <p>插槽内容</p>
 6         </div>
 7     </SlotBase>
 8 </template>
 9 
10 <script>
11 import SlotBase from './SlotBase.vue';
12 export default{
13     components:{
14         SlotBase
15     }
16 }
17 </script>

SlotBase.vue组件内容

1 <template>
2    <h3>插槽基础知识</h3>
3    <slot></slot>
4 </template>

 

2、默认内容

在外部没有提供任何内容的情况下,可以为插槽指定默认内容。

Parent.vue的SlotBase为空

1 <template>
2     <SlotBase></SlotBase>
3 </template>

SlotBase.vue组件内容可以写默认值

1 <template>
2    <h3>插槽基础知识</h3>
3    <slot>默认值</slot>
4 </template>

3、具名插槽

有时在一个组件中包含多个插槽出口是很有用的。

对于这种场景,<slot> 元素可以有一个特殊的 attribute name,用来给各个插槽分配唯一的 ID,以确定每一处要渲染的内容:

 

 Parent.vue内容

 1 <template>
 2     <SlotBase>
 3         <template v-slot:header>
 4             <p>header</p>
 5         </template>
 6         <template #main>
 7             <p>main</p>
 8         </template>
 9         <template v-slot:footer>
10             <p>footer</p>
11         </template>
12     </SlotBase>
13 </template>
14 
15 <script>
16 import SlotBase from './SlotBase.vue';
17 export default{
18     components:{
19         SlotBase
20     }
21 }
22 </script>

SlotBase.vue组件内容

1 <template>
2    <slot name="header"></slot>
3    
4    <slot name="main"></slot>
5 </template>

 

4、作用域插槽

然而在某些场景下插槽的内容可能想要同时使用父组件域内和子组件域内的数据。要做到这一点,我们需要一种方法来让子组件在渲染时将一部分数据提供给插槽。

 Parent.vue内容

 1 <template>
 2     <SlotBase v-slot="slotProps">
 3         作用域插槽内容:<br>
 4        {{ slotProps.msg }}-{{ slotProps.count }}
 5     </SlotBase>
 6 </template>
 7 
 8 <script>
 9 import SlotBase from './SlotBase.vue';
10 export default{
11     components:{
12         SlotBase
13     }
14 }
15 </script>

SlotBase.vue内容

 1 <template>
 2    <slot :msg="message" :count="1"></slot>
 3 </template>
 4 <script>
 5 export default{
 6     data(){
 7         return{
 8             message:"myMsg内容"
 9         }
10     }
11 }
12 </script>

 

5、具名作用域插槽

具名作用域插槽的工作方式也是类似的,插槽 props 可以作为 v-slot 指令的值被访问到:v-slot:header="slotProps"。当使用缩写时是这样:#header="slotProps"

 Parent.vue内容

 1 <template>
 2     具名作用域插槽<br>
 3     <SlotBase>
 4         <template v-slot:header="slotProps" >
 5            <p>Header:{{ slotProps.msg }}-{{ slotProps.count }}</p>
 6         </template>
 7        <template #main="slotProps">
 8            <p>Main: {{ slotProps.job }}</p>
 9         </template>
10     </SlotBase>
11 </template>
12 
13 <script>
14 import SlotBase from './SlotBase.vue';
15 export default{
16     components:{
17         SlotBase
18     }
19 }
20 </script>

SlotBase.vue内容

 1 <template>
 2    <slot name="header" :msg="message" :count="1"></slot>
 3    <slot name="main" :job="jobMsg"></slot>
 4 </template>
 5 <script>
 6 export default{
 7     data(){
 8         return{
 9             message:"myMsg内容",
10             jobMsg:"iT的工作"
11         }
12     }
13 }
14 </script>

 

标签:slot,13,vue,插槽,slotProps,内容,vue3,SlotBase
From: https://www.cnblogs.com/wuzexin/p/17534841.html

相关文章

  • 【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块5
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • Vue3主要的响应类方法(ref、reactive、toRef、toRefs)
    1.Vue.ref()1.1.可以为单个属性添加响应式状态。1.2.可以为对象添加响应式状态,当给对象的某个属性单独ref后,改变后的属性值不会同时改变原始值。1.3.访问数据值,需要添加.value。1.4.原始数据的拷贝。(原始数据不被改变)2.Vue.reactive()2.1.给对象添加响应式状态2.2.访问数据值......
  • vue3--setUp以及ref的使用
    <template><h1>计数统计:{{countRef}}</h1><h2><button@click="inCreate">数量加1</button></h2><h2><button@click="inDelete">数量-1</button></h2></template><!--......
  • vue3 ref全家桶(小满zs vue3 笔记六)
    tip1:vue3无响应式数据(控制台数据已经变化,但是页面无刷新)<template><div>认识Ref全家桶</div><div>{{message}}</div><button@click="change">改变</button></template><scriptsetuplang="ts">letmessage:s......
  • P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷
    P3089[USACO13NOV]Pogo-CowS弹簧踩高跷洛谷题目传送门目录P3089[USACO13NOV]Pogo-CowS弹簧踩高跷题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示题目大意方法一(线段树维护dp)code方法二(单调队列维护dp)code题目描述Inanill-conceivedattempttoenhanc......
  • vue3 安装 3d-force-graph
    1.首先创建vue3的项目2.创建好后通过开发工具打开项目并打开命令行,输入指令npminstall 3d-force-graph安装即可3.在使用的页面中引入 3d-force-graph<!--官网的basic案例--><template><!--ref用于在组件中引用当前的DOM元素。--><divref="container"></div><......
  • 13.y轴加百分号
     yAxis:{name:'单位:百分比',//y轴单位//min:0,//minInterval:1,max:100,interval:25,axisLabel:{fontSize:12,fontFamily:"Bebas",color:"#BDD8FB",formatter:"{v......
  • vue3 虚拟dom与diff算法
    diff算法vue3diff算法原码地址:  https://github.com/vuejs/core1.diff算法主要是说renderer.ts中patchChildren这段代码逻辑,如下:  2.diff算法排序分为无key时diff算法排序逻辑和有key时diff算法排序逻辑2.1无key时diff算法排序逻辑,分为三步如下,如图1中无key......
  • 1.Vue3 配置开发-测试环境
    1、根目录新建.env.testing、.env.donline文件2、package.json=》scripts中配置"start":"vue-cli-serviceserve--modetesting","start-o":"vue-cli-serviceserve--modedonline"3、vue.config.jsconstBundleAnalyzerPlugin=require(&......
  • 错误:rpmdb: BDB0113 Thread/process 8709/139671674841152 failed
    rpm库报错错误:rpmdb:BDB0113Thread/process8709/139671674841152failed:BDB1507ThreaddiedinBerkeleyDBlibrary错误:db5错误(-30973)来自dbenv->failchk:BDB0087DB_RUNRECOVERY:Fatalerror,rundatabaserecovery错误:无法使用db5- (-30973)打开Packages......