slot插槽使用

使用场景,一般父组件中又一大段模板内容需要运用到子组件上。或者更加复杂的,子组件需要运用到父组件大段模板内容,而子组件却不知道挂载的内容是什么。挂载点的内容是由父组件来决定的。

Slot的通俗理解

slot是“占坑”,在组件模板中占好了位置,当使用该组件标签时候,组件标签里面的内容就会自动填坑(替换组件模板中<slot>位置),当插槽也就是坑<slot name=”mySlot”>有命名时,组件标签中使用属性slot=”mySlot”的元素就会替换该对应位置内容;

// 父组件
<template>
<div id="app">
<div>头部</div>
<div>
<v-childe>
<!-- 模板内容 -->
<div>来自父组件模板内容</div>
<div>这里的模板内容将会替换到子组件slot位置上</div>
<div>{{message}}</div>
<!-- 模板内容 -->
</v-childe>
</div>
<div>底部</div>
</div>
</template>
<script>
import Childe from './components/childe.vue'
export default {
components:{
'v-childe':Childe
},
data(){
return{
message:'动态数据' //message的数据根据父组件来决定
}
}
}
</script>

注意:slot分发的内容,作用域在父组件上

//子组件
<template>
<div>
<div>子组件头部</div>
<slot>
<!-- 默认内容 -->
<div>当父组件没有定义slot内容时,会默认显示</div>
<!-- 默认内容 -->
</slot>
<div>子组件底部</div>
</div>
</template>

注意:子组件内<slot>内的备用内容,他的作用域是子组件本身。

父组件的内容将会替换到子组件的slot位置上,因为没有指定名字,所以子组件无论添加多少个<slot></slot> 都是同样的内容。

显示结果

//当父组件使用了slot时 (即<v-child> .... </v-chiild>里面有内容)
头部
子组件头部
来自父组件模板内容
这里的模板内容将会替换到子组件slot位置上
动态数据
子组件底部
底部
//当父组件没有使用slot时 (即<v-child></v-child>为空标签)
头部
子组件头部
当父组件没有定义slot内容时,会默认显示
子组件底部
底部

具名slot

为slot加上名字能分发更多内容

// 父组件
<template>
<div id="app">
<div>头部</div>
<div>
<v-childe>
<!-- 模板内容 -->
<div slot="top">
<div>父组件插入名为top的slot内容</div>
</div>
<div slot="bottom">
<div>父组件插入名为bottom的slot内容</div>
</div>
     <div>动态数据</div> //注意这里父组件没有使用slot的name特性,他将作为默认slot显示
<!-- 模板内容 -->
</v-childe>
</div>
<div>底部</div>
</div>
</template>
//子组件
<template>
<div>
<div>子组件头部</div>
<slot name="top">
<!-- 默认内容 -->
<div>当父组件没有定义slot内容时,会默认显示</div>
<!-- 默认内容 -->
</slot>
<div>子组件底部</div>
</div>
</template>

当父组件和子组件的slot名子一致的时候,才会显示父组件插入的内容。而名字不一致的内容则会抛弃

访问slot

在组件内,可通过 this.$slot.default  访问默认插入内容

     可通   this.$slot.+name 例如this.$slot.top  访问具名slot插入的内容

Vue slot插槽内容分发的更多相关文章

  1. Vue slot插槽

    插槽用于内容分发,存在于子组件之中. 插槽作用域 父级组件作用域为父级,子级组件作用域为子级,在哪定义的作用域就在哪. 子组件之间的内容是在父级作用域的,无法直接访问子组件里面的数据. 插槽元素 &l ...

  2. Vue slot插槽通俗解释

    slot内容分发是Vue的Api来源 <div id="app"> <my-list> {{msg}} </my-list> </div& ...

  3. Vue slot 插槽用法:自定义列表组件

    Vue 框架的插槽(slot)功能相对于常用的 v-for, v-if 等指令使用频率少得多,但在实现可复用的自定义组件时十分有用.例如,如果经常使用前端组件库的话,就会经常看到类似的用法: < ...

  4. vue slot 插槽详解

    插槽含义:就是引入子组件后,在插入子组件元素中添加信息或者标签,使得子组件的指定位置插入信息或者标签 插槽有三种:默认插槽.具名插槽.作用域插槽,由于vue2.6.0后对插槽进行修改,但是兼容2.6. ...

  5. 组件(4):使用slot进行内容分发

    组件的作用域(一) 父组件模板的内容在父组件作用域内编译:子组件模板的内容在子组件作用域内编译. 父子组件的编译相互独立,编译时只能使用各自作用域中的属性和方法,例如,你不可以在父组件模板内,将一个指 ...

  6. vue slot插槽的使用

    slot插槽的使用场景 父组件向子组件传递dom时会用到插槽   作用域插槽:当同一个子组件想要在不同的父组件里展示不同的状态,可以使用作用域插槽.展示的状态由父组件来决定   注:想要修改父组件向子 ...

  7. vue slot插槽的使用方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. vue slot 插槽备忘

    老是记不住插槽咋回事 记录下来备忘 父组件 <tab><template slot="boy" slot-scope="test">{{ ...

  9. vue slot插槽v-show不控制显示隐藏

    vue中想控制插槽的显示隐藏,用v-show是不起任何作用的,改用v-if 可以生效.

随机推荐

  1. C#_Lamada帮助类

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  2. [PHP] pow指数运算函数与二进制

    1.a的-2次方=(a分之一)的2次方2.-a的2次方 3次方 按照这个规则,负负得正,负正得负,正正得正,指数是偶数最终结果是正的,是奇数就是负的3.二进制转换十进制,0b开头是二进制 <?p ...

  3. C# 创建EXCEL图表并保存为图片

    数据表格能够清晰的呈现数据信息,但是我们对于一些繁杂多变的数据想要很直观的看到数据变化走势或者数据的占比时,数据图表会更具代表性,并且在呈现数据信息上也更形象,也能获取更多纯数字信息所不能直接展现的信 ...

  4. Secret Message ---- (Trie树应用)

    Secret Message   总时间限制:  2000ms  内存限制:  32768kB 描述 Bessie is leading the cows in an attempt to escap ...

  5. 解决echarts饼图不显示数据为0的数据

    如图所示 饼图数据为0但是还是会显示lableline和lable 解决方法 var echartData = [{ value: data_arry[0]==0?null:data_arry[0], ...

  6. Yii2基本概念之——配置(Configurations)

    在Yii中创建新对象或者初始化已经存在的对象广泛的使用配置,配置通常包含被创建对象的类名和一组将要赋值给对象的属性的初始值,这里的属性是Yii2的属性.还可以在对象的事件上绑定事件处理器,或者将行为附 ...

  7. 亿级流量场景下,大型缓存架构设计实现【1】---redis篇

    *****************开篇介绍**************** -------------------------------------------------------------- ...

  8. 集成Android人脸识别demo分享

    本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...

  9. Docker入门笔记

    Docker入门笔记 随笔记录初学Docker遇到的问题, 以免下次再犯. 本机系统Ubuntu18.04 安装 Docker有2个版本 Community Edition (CE) 社区版(免费) ...

  10. Git使用入门笔记

    1. 创建并初始化一个 代码仓库 (repository) $ git init 2.查看当前状态 $ git status 3. 将修改后的文件推入缓冲区 $ git add <filenam ...