Vue_使用插槽(slot)

简介: 当父组件向子组件传值的时候,有时候,父组件传的并不是单纯的数值、字符串,有可能是带标签(DOM)的数据,那么如何传值呢? 如果我们像正常父向子传值那样操作。 <slott content="<p>hello,slot</p>"></slott> 1子组件: <template> <div cl.

当父组件向子组件传值的时候,有时候,父组件传的并不是单纯的数值、字符串,有可能是带标签(DOM)的数据,那么如何传值呢?

如果我们像正常父向子传值那样操作。

 <slott content="<p>hello,slot</p>"></slott>

 
 
  • 1

子组件:

<template> <div class="slott"> <div>{{content1}}</div> </div> </template> <script>
export default{
 props:['content'],
 data(){
 return{
 content1 : this.content,
 }
 }
 } 
</script>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

效果:

这里写图片描述

我们可以看到显示的并不是我们想要的,当然我们可以在子组件在接受的时候,使用v-html。

<template> <div class="slott"> <div v-html='content1'></div> </div> </template>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

效果:

这里写图片描述
这里写图片描述

但是缺点是:多生成了一个div标签,那换成template模板占位符呢?是渲染不出来这个效果的。

div标签虽然可以实现,但是如果有很多DOM元素呢?显然不好控制,所以Vue中提供了slot插槽的方式

一.插槽

在父组件中直接插入正常的DOM结构

 <slott> <p>你好solt!</p> </slott>

 
 
  • 1
  • 2
  • 3

然后在子组件用<slot>来代替,所以说slot是保留字,不能当做id的

<template> <div class="slott"> <slot></slot> </div> </template> <script>
export default{
 props:['content'],
 data(){
 return{
 content1 : this.content,
 }
 } 
</script>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

效果:

这里写图片描述

效果:

这里写图片描述

二.引入header组件

在实际开发中,我们经常会遇到一种情况,将 header和footer传进来。

在父组件中:

<slott> <div>header</div> <div>footer</div> </slott> 

 
 
  • 1
  • 2
  • 3
  • 4

在子组件中:

 <slot></slot> <div>content</div> <slot></slot>

 
 
  • 1
  • 2
  • 3

结果:

这里写图片描述

这是为什么呢?slot标签代表的显示插槽的所有的内容,那如何达到我们想要的效果呢?我们可以用具名插槽。

父组件的插槽中命名。

<slott> <div slot="header">header</div> <div slot="footer">footer</div> </slott> 

 
 
  • 1
  • 2
  • 3
  • 4

在子组件引用名称

 <slot name="header"></slot> <div>content</div> <slot name="footer"></slot>

 
 
  • 1
  • 2
  • 3

效果:

这里写图片描述

附:slot标签可以有默认值,如果找不到相关的插槽,就会显示默认值。

在插槽中去掉header

<slott> <div slot="footer">footer</div> </slott> 

 
 
  • 1
  • 2
  • 3

在调用的时候找不到header的话,就会显示默认的内容

 <slot name="header">default</slot> <div>content</div> <slot name="footer"></slot>

 
 
  • 1
  • 2
  • 3

效果:

这里写图片描述

二.作用域插槽

有时候,我们在使用插槽的时候,希望父组件可以控制插槽的内容,

什么时候用作用域插槽呢?当子组件做循环或者某一部分它的DOM结构应该由外部传递进来的时候,这个时候我们用作用域插槽

使用作用域插槽,子组件会向父组件的作用域里传递数据。

父组件使用插槽,要包含在template标签中。props是自定义的名字

eg:

<slott> <template slot-scope="props"> <h1>{{props.item}}</h1> </template> </slott> 

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

子组件往外传递数据:

 <slot 
 v-for="item of list" 
 :item=item>
 </slot>

//data中: return{
 list:[1,2,3,4]
 }


 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

效果:

这里写图片描述

父组件也可以改为li:

<slott> <template slot-scope="props"> <li>{{props.item}}</li> </template> </slott> 

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

效果:

这里写图片描述

这样的话,就实现了由父组件决定实现的内容

原文发布时间:06月30日

原文作者:_dalianmiao

本文来源CSDN博客如需转载请紧急联系作者

相关文章
|
7天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
51 1
|
17天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
JavaScript
初识 Vue(19)---(Vue 中使用插槽(slot))
Vue 中使用插槽(slot) 案例:子组件中的一部分内容是根据父组件传递来的 DOM 来进行显示 Vue 中使用插槽(slot) Vue.
1265 0
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
48 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
34 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
41 1
vue学习第四章
|
2月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
32 1
vue学习第7章(循环)

热门文章

最新文章