vue slot插槽_笔记本内存条插槽显示4个
大家好,又见面了,我是你们的朋友全栈君。
为什么使用slot
slot(插槽)
- 在生活中很多地方都有插槽,电脑usb的插槽,插板当中的电源插槽
- 插槽的目的是为了让我们原来的设备具备更多的扩展性
- 比如电脑的USB我们可以插入U盘,手机,鼠标,键盘等等
组件中的插槽
- 组件的插槽也是为了让我们的组件更具有扩展性
- 让使用者决定组件内部的一些内容到底展示什么
例子
- 移动开发中,几乎每个页面都有导航栏
- 导航栏我们必然封装成一个插件
- 一旦有了这个组件,我们就可以在多个页面中复用了
如何封装这类组件(slot)
- 最好的封装方式就是将共性抽取到组件中,将不同的部分暴露为插槽
- 一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容
- 是搜索框,是文字,是按钮,由调度者自己决定
插槽的案例
<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>
上述代码干了以下事情
1.定义了子组件cpn
,然后在子组件中预留了一个插槽,插槽的内容由用户填写
2.父组件中使用了3次子组件,3个子组件分别给插槽填写了不同的内容
最后展示效果如下
插槽默认值
如果我们需要大量使用这个组件,而且组件预留的插槽,我们大多数都是填写的返回按钮,只有极少数填写其他的,那么这种情况就可以为插槽设置一个默认值
<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>
上述代码做了如下几件事情
1.定义了子组件cpn
,在子组件中定义了user
2.在子组件cpn
的模板的插槽中绑定了属性data
,且插槽的默认值为user.lastname
3.在html
中使用了子组件,并使用v-slot
绑定了插槽Prop
对象,这样就可以通过对象名称.子组件中绑定的属性名称(slot.data
),来访问子组件中的数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164855.html原文链接:https://javaforall.cn
相关文章
- VUE 项目本地没有问题,部署到服务器上提示错误
- 请简述什么是Vue组件化开发_vue组件化开发
- vue md5.js_VUE.js
- vue源码分析-从new Vue开始
- vue文件上传速度慢,有可能是nginx配置的问题
- wangeditor富文本编辑器_vue使用富文本编辑器
- Vue和vue全家桶有什么区别_Vue和vue全家桶有什么区别
- vue中v-cloak解决刷新或者加载出现闪烁显示变量问题
- 【实用】Vue线上环境禁止打印console.log
- Vue双向绑定原理解析,理解发布订阅难点问题!
- vue.js客服系统实时聊天项目开发(十五)实现聊天界面滚动到底部
- vue.js客服系统实时聊天项目开发(二十)vue项目框架目录结构
- 又来分享3个Vue开源项目,太强了 !
- vue实现下拉框二级联动效果
- vue.js入门篇之Vue.js 样式绑定
- IDEA安装Vue插件后为什么创建.vue文件不显示vue图标
- 使用Vue技术从MSSQL中获取数据(vue获取mssql数据)
- Vue接入Redis拓展应用的可能性(vue调redis)
- Vue快速连接Redis实现数据存储(vue 直连redis)
- 用Vue从Redis中获取强有力的数据(vue用redis中数据)
- Vue如何连接Redis(vue怎么连接Redis)
- Vue结合Redis实现性能优化(vue引入redis)
- 优化网站性能,Vue搭配Redis缓存更加有效(vue使用redis缓存)
- 从零开始Vue项目中使用Redis(vue使用redis)
- Vue应用中部署Redis(vue中使用redis)
- Oracle与Vue官网联合宣传前瞻技术,轻松开发(oracle vue官网)