Vue slot插槽内容分发
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插槽内容分发的更多相关文章
- Vue slot插槽
插槽用于内容分发,存在于子组件之中. 插槽作用域 父级组件作用域为父级,子级组件作用域为子级,在哪定义的作用域就在哪. 子组件之间的内容是在父级作用域的,无法直接访问子组件里面的数据. 插槽元素 &l ...
- Vue slot插槽通俗解释
slot内容分发是Vue的Api来源 <div id="app"> <my-list> {{msg}} </my-list> </div& ...
- Vue slot 插槽用法:自定义列表组件
Vue 框架的插槽(slot)功能相对于常用的 v-for, v-if 等指令使用频率少得多,但在实现可复用的自定义组件时十分有用.例如,如果经常使用前端组件库的话,就会经常看到类似的用法: < ...
- vue slot 插槽详解
插槽含义:就是引入子组件后,在插入子组件元素中添加信息或者标签,使得子组件的指定位置插入信息或者标签 插槽有三种:默认插槽.具名插槽.作用域插槽,由于vue2.6.0后对插槽进行修改,但是兼容2.6. ...
- 组件(4):使用slot进行内容分发
组件的作用域(一) 父组件模板的内容在父组件作用域内编译:子组件模板的内容在子组件作用域内编译. 父子组件的编译相互独立,编译时只能使用各自作用域中的属性和方法,例如,你不可以在父组件模板内,将一个指 ...
- vue slot插槽的使用
slot插槽的使用场景 父组件向子组件传递dom时会用到插槽 作用域插槽:当同一个子组件想要在不同的父组件里展示不同的状态,可以使用作用域插槽.展示的状态由父组件来决定 注:想要修改父组件向子 ...
- vue slot插槽的使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue slot 插槽备忘
老是记不住插槽咋回事 记录下来备忘 父组件 <tab><template slot="boy" slot-scope="test">{{ ...
- vue slot插槽v-show不控制显示隐藏
vue中想控制插槽的显示隐藏,用v-show是不起任何作用的,改用v-if 可以生效.
随机推荐
- frame buffer简单应用
现在我们要在LCD上画一个点,我们无法直接对LCD屏进行操作.这时候就需要用到FrameBuffer,Linux可以FrameBuffer这个设备来供用户态进程实现直接写屏.首先我们先简单看一下lin ...
- 初识 MongoDB,MongoDB 的安装运行
1. MongoDB 非关系型数据库 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.目的是为WEB应用提供扩展的高性能的数据存储解决方案.MongoDB是一个介于关系型数据库和 ...
- ElasticSearch6学习(1)-安装Elasticsearch
安装准备: 安装Elasticsearch唯一的要求是安装Java8,包括对应的Jdk.其他java9/java10没尝试,考虑兼容问题.我这里只用了java8 安装java8可以参考我之前写的一篇文 ...
- JAVA-HashMap实现原理
一.HashMap实现原理 1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.它允许存入null值和null键.它不保证存入元素的顺序与操作顺序一致,主要是不保证元素的顺序 ...
- laravel框架使用中错误及解决办法总结
1.Laravel访问出错错误信息:`Warning: require(/vendor/autoload.php):failed to open stream: No such file or dir ...
- 【代码笔记】Web-CSS-CSS Float(浮动)
一, 效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 【代码笔记】Web-CSS-CSS Padding(填充)
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- #WEB安全基础 : HTML/CSS | 0x8CSS进阶
你以为自己学这么点CSS就厉害了? 学点新东西吧,让你的网页更漂亮 我们只需要用到图片和网页 这是index.html的代码 <html> <head> <title ...
- 这个月干啥去了?——H5+移动应用实战开发
又到了公司一年当中最忙的时刻了,为了赶项目,现在居然开启了996模式,这是我从事.net开发以来从来没遇到过的. 一转眼,一个月又过了,回头一看,这个月一篇文章都没有发,上个月忙着一个人做项目,项目忙 ...
- Android 常驻广播和非常驻广播
一.知识准备 ①常驻广播接受者:使用AndroidManifest.xml注册,接受者不随Activity的销毁而销毁,也就是拥有独立的生命周期. ②非常驻广播接受者:使用registerReceiv ...