vue_组件插槽详述
在使用组件时,在引用的组件标签中添加内容时,会自动被组件中的模板代替,如【例1】
【例1】
<my-comp>Have a happy Life</my-comp>
Vue.component('my-comp',{template:`<div> Life is a shit! </div>`
})
【结果】
1.插槽的使用
当不想要传递给组件的内容被替代,则可以使用组件插槽来解决这个问题,具体使用方法是,在组件模板中添加 <slot> 标签,当组件渲染时,<slot></slot> 将会被替换为“写在组件标签结构中的内容”,如【例2】
【例2】
Vue.component('my-comp',{template:`<div> Life is a shit! <slot></slot> </div>`
})
【结果】
【注】
- 插槽内可以包含任何模板代码,包括 HTML 和其他组件
- 如果组件没有包含 <slot> 元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃
2.编译作用域
因为父级模板里的所有内容都是在父级作用域中编译的,子模版里的所有内容都是在子作用域中编译的,所以插槽不能访问其所在组件的作用域,而是模板的作用域,如【例3】
【例3】
<my-comp>Hi {{ userName }}, Have a happy Life!</my-comp>
//组件
Vue.component('my-comp',{template:`<div><slot></slot> </div>`,data(){return {userName: 'Jony'}}
})
//vue实例
const vm = new Vue({el:'#app',data:{userName:'Jim'}
})
【结果】
3.默认插槽
默认插槽即,若在组件引用时,没有像其传递内容,则使用默认插槽的内容(也称为后备内容);若在引用时,传递了内容,则渲染传递的内容,如【例4】
【例4】
组件
Vue.component('my-button',{template:`<button type="submit"><slot>Submit</slot> </button>` })
未传递内容
<my-button></my-button>
【结果】
传递内容
<my-button>Hit me</my-button>
【结果】
4.具名插槽
(1)具名插槽使用
若在一个组件中需要使用多个插槽,则要使用具名插槽来区分,其使用方式为:在组件中的 <slot> 元素上使用一个特殊的特性 name,利用这个特性可以定义额外的插槽;在引用组件时,需要在 <template> 元素上使用 v-slot 指令,v-slot 的参数即是特性 name,如【例5】
【注】一个不带name的 <slot> 会带有隐含的名字“default”。
【例5】
//组件
Vue.component('my-cmp',{template:`<div class="container"><header><slot name='header'></slot></header><main><slot name='main'></slot></main><footer><slot name='footer'></slot></footer><slot></slot></div>`
})
<!-- 组件引用 -->
<my-cmp><template v-slot:header><div>header</div></template><template v-slot:main><div>main</div></template><template v-slot:footer><div>footer</div></template><template v-slot:default><div>default</div></template>
</my-cmp>
【结果】
【注】v-slot 只能添加在 <template> 上,只有一种情况特殊(介绍如下)
(2)具名插槽的缩写
<my-cmp><template #header>header</template><template #default>default</template> <template #main>main</template> <template #footer>footer</template>
</my-cmp>
【注】该缩写只有在其有参数时可以使用
5.作用域插槽
为了能够让插槽内容访问子组件的数据,可以将子组件的数据作为绑定在 <slot> 元素的一个特性(插槽 prop),则在父级作用域中,可以给v-slot带一个值来定义所提供的插槽 prop 名字,如【例6】
【例6】
//组件
Vue.component('my-comp1',{data(){return {user:{name:'桃花扇J',age:18}}},template:`<div><slot v-bind:user="user"></slot> </div>`
})
<my-comp1><template v-slot:default="slotProps">{{ slotProps.user.name }}</template>
</my-comp1>
【结果】
(1)独占默认插槽的缩写语法
当被提供的内容只有默认插槽时,组件的标签可以被当作插槽的模板来使用,此时,可以将 v-slot 直接用在组件上,且可以缩写为以下形式:
<my-comp1 v-slot="slotProps">{{ slotProps.user.name }}
</my-comp1>
【注】默认插槽的缩写语法不能和具名插槽混用,会导致作用域不明确,即只要出现多个插槽,就需要为所有的插槽使用完整的基于 <template> 的语法
(2)解构插槽 Prop
使用结构传入具体的插槽prop会使模板更简洁
<my-comp1 v-slot="{ user }">{{ user.name }}
</my-comp1>
根据解构的语法,还可以给 prop 重命名
<my-comp1 v-slot="{ user:person }">{{ person.name }}
</my-comp1>
vue_组件插槽详述相关推荐
- Vue第二天学习总结—— Vue全家桶之组件化开发(组件化开发思想、组件注册、Vue调试工具用法、组件间数据交互传递、组件插槽、基于组件的案例——购物车)
(一) 组件化开发思想 1. 现实中的组件化思想体现 组件化即是对某些可以进行复用的功能进行封装的标准化工作 标准:要想组件能够成功组合在一起,每个组件必须要有标准 分治:将不同的功能封装到不同的组件 ...
- 组件间数据交互——组件插槽的作用||具名插槽用法|| 作用域插槽
组件插槽的作用 组件插槽:父组件向子组件传递内容 <!DOCTYPE html> <html lang="en"> <head><meta ...
- Uniapp学习笔记(数据展示、数据循环、条件编译、计算属性、组件的使用、组件插槽、生命周期)
1.项目准备 1.1开发方式 uni-app为我们提供2种开发方式: 使用DCloud公司提供HBuilderX工具来快速开发: 使用脚手架来快速开发(我们这次项目使用此方式): 1.2脚手架搭建项目 ...
- Vue动态组件、组件缓存、组件激活和非激活、组件插槽、组件name
一.动态组件 如何切换2个组件 互斥的显示或者隐藏呢 除了v-if 什么是动态组件? 多个组件使用同一个挂载点,并动态切换.这就是动态组件 完成一个注册功能页面, 2个按钮切换, 一个填写注册信息, ...
- 【Vue】Vue全家桶(三)Vue组件通信+Vue组件插槽+动画与过渡+使用vue-cli解决Ajax跨域问题
1 Vue组件通信 1.1 组件间通信基本原则 不要在子组件中直接修改父组件的状态数据 数据在哪, 更新数据的行为(函数)就应该定义在哪 1.2 vue 组件间通信方式 props vue 的自定义事 ...
- angular学习总结-组件插槽
组件插槽 - Angular官网上叫内容投影,Vue也有一样的功能实现--插槽slot.他俩是同一种概念,目的是用来创建更加灵活的且可复用组件. 内容投影是一种模式,你可以在其中插入或投影要在另一个组 ...
- 组件插槽的使用(组件进阶)
vue中的插槽: 组件通过插槽传入自定义结构 用于实现组件的内容分发, 通过 slot 标签, 可以接收到写在组件标签内的内容 vue提供组件插槽能力, 允许开发者在封装组件时,把不确定的部分定义为插 ...
- 组件插槽和自定义属性
组件插槽 文章目录 组件插槽 基础使用--匿名插槽 默认内容 具名插槽 作用域插槽 使用场景 自定义指令 局部注册和使用 全局注册和使用 自定义指令-传值 用来实现组件内容的分发,通过slot标签,可 ...
- 小程序-自定义组件-插槽
自定义组件-插槽 1.什么是插槽 在自定义组件的wxml结构中,可以提供一个<slot>节点(插槽),用于承载组件使用者提供的wxml结构. 2.单个插槽 在小程序中,默认每个自定义组件中 ...
最新文章
- java拉姆达表达式事例,Java Lambda表达式详解和实例
- 最全面详细讲解Oracle入门
- OpenKruise v0.10.0 版本发布:新增应用弹性拓扑管理、应用防护等能力
- 用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
- 小程序 获取当前用户城市信息(省市区)
- RedHat Linux 7.3基础环境搭建
- 如何将多个一维列表转化为二维列表_数据分析2_如何处理一维、二维数据
- JS基础--Date.parse(),Date.UTC()和Date.now()
- IDEA 使用generator逆向工程生成pojo,mapper
- 这是云代驾,不是打游戏
- 关于局部变量的几个难点
- 解决VuePHP跨域请求
- DAX计算月末一次加权平均出库金额
- 阿里、美团、Oracle等大厂的Java虚拟机面试题集锦
- 进阶无人驾驶—百度Apollo高精度地图
- 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
- 全国大学生GIS应用技能大赛(开发试题参考)
- Highcharts翻译系列三:exporting导出和打印选项
- 树莓派微信小程序服务器搭建,之四-呕血制作-Lettuce IOT框架-移远BC35G+树莓派+华为OC+SpringBoot后台+微信小程序...
- 处理器CPU概念及CPU多线程