slot插槽的使用场景有哪些,用法是怎样的
Admin 2022-06-30 群英技术资讯 1134 次浏览
USB
我们可以插入U盘,手机,鼠标,键盘等等<div id="app"> <cpn><button>按钮</button></cpn> <cpn><p>hello world</p></cpn> <cpn><p>666</p></cpn> </div> <template id="cpn"> <div> <h2>我是组件</h2> // 插槽预留的位置,方便使用者自己填写 <slot></slot> </div> </template> <script src="../js/vue.js"></script> <script> const app = new Vue({ el: "#app", components: { "cpn": { template: `#cpn`, } } }) </script>
上述代码干了以下事情:
cpn
,然后在子组件中预留了一个插槽,插槽的内容由用户填写最后展示效果如下:
如果我们需要大量使用这个组件,而且组件预留的插槽,我们大多数都是填写的返回按钮,只有极少数填写其他的,那么这种情况就可以为插槽设置一个默认值
<div id="app"> <cpn></cpn> <cpn></cpn> <cpn></cpn> </div> <template id="cpn"> <div> <slot><button>返回</button></slot> </div> </template>
我们在子组件中设置了一个默认值为返回按钮的插槽,那么父组件在使用时如果不填写任何内容,那么默认就是返回按钮
有时我们需要多个插槽。例如对于一个带有如下模板的组件:
<template id="cpn"> <div> <slot name="header"><span>头部</span></slot> <slot name="main"><span>中间</span></slot> <slot name="footer"><span>页脚</span></slot> </div> </template>
我们在组件中预留了3个插槽,但是这里指定了3个名字,后续父组件使用v-slot
指定name
属性后就能填写自己的内容,比如如下代码
<div id="app"> <cpn> <template v-slot:header> <p>header头部</p> </template> <template v-slot:footer> <p>footer页脚</p> </template> </cpn> </div>
使用了cpn
组件,然后指定了插槽name
属性为header
和footer
的内容,指定后自己填写的内容就会替换默认的内容。
注意:这里的语法格式是固定的,必须在使用template标签上绑定v-slot:插槽的名字
通过外面传给组件的变量,在以后使用插槽的时候是不能使用的
<div id="app"> <cpn v-show="isShow"></cpn> </div> <template id="cpn"> <p>hello</p> </template> <script src="../js/vue.js"></script> <script> const app = new Vue({ el: "#app", data: { isShow: true }, components: { "cpn": { template: `#cpn`, data(){ return{ isShow: false } } } } }) </script>
上面我们定义了子组件cpn
,子组件中有属性isShow
,app
实例中也定义了属性isShow
,最后使用子组件cpn
时使用了v-show
,当值为true
显示,值为false
不显示
问题:v-show
中的isShow
的值是实例中的true还是子组件中的false
答案:是true,因为你使用的时候是在app实例范围内,所以isShow
会去从实例中的data
去查找,虽然你是在cpn
子组件中绑定的,但是这里的cpn你只需要把他当做普通的标签即可,如果你想让isShow
的值为false
,那么你只需要在子组件的template
模板中使用<p v-show="isShow">hello</p>
默认在插槽中的代码只能使用全局Vue
中的属性,如果想要使用自定义组件中的属性,那么需要在定义slot
的时候使用v-bind
来进行绑定。
<div id="app"> <cpn> <template v-slot:default="slot"> {{slot.data.firstName}} </template> </cpn> </div> <template id="cpn"> <div> <slot :data="user"> {{user.lastname}} </slot> </div> </template> <script src="../js/vue.js"></script> <script> const app = new Vue({ el: "#app", components: { "cpn": { template: `#cpn`, data(){ return{ "user": { "firstName": "甲", "lastname": "壳虫" } } } } } }) </script>
上述代码做了如下几件事情:
user
data
,且插槽的默认值为user.lastname
html
中使用了子组件,并使用v-slot
绑定了插槽Prop
对象,这样就可以通过对象名称.子组件中绑定的属性名称(slot.data
),来访问子组件中的数据免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
tab栏的实现相信大家都比较熟悉了,这篇文章给大家分享的是用JavaScript实现tab栏的方法,本文有详细的思路及代码介绍,对新手学习用JavaScript实现tab栏有一定的帮助,需要的朋友可以参考。
这篇文章主要为大家介绍了npm脚本库组织在项目中的地位详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
JS中require方法怎样用?一些新手对于node.js中require方法不是很了解,对此这篇文章就主要给大家分享一下node.js中require方法以及加载规则,有着方面学习需求的朋友就接着看吧。
学过 vue2 的小伙伴们肯定学习过侦听器,主要是用来监听页面数据或者是路由的变化,来执行相应的操作,在 vue3里面呢,也有侦听器的用法,功能基本一样,本文就来为大家详细讲讲
这篇文章主要为大家介绍了Vue的列表渲染,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008