Vue slot插槽通俗解释
slot内容分发是Vue的Api来源
<div id="app">
<my-list> {{msg}} </my-list>
</div>
<script>
Vue.component("my-list", {
template: `<div><slot></slot></div>`,
});
var app = new Vue({
el: "#app",
data: {
msg: "父组件传参",
},
});
</script>
父组件里面:把<my-list> {{msg}} </my-list>中的 <my-list> </my-list>当作一个函数占位符,这里具体函数是my-list
{{msg}}当作父组件传给这个函数的参数
<slot></slot>
子组件里面:对应的函数是抽象的,它的效果就是将参数渲染到页面中
现在做几组对照试验:
- 子组件中的template中只有
<slot></slot>能接收传参,现将<slot></slot>去掉
<script>
Vue.component("my-list", {
template: `<div></div>`,
});
var app = new Vue({
el: "#app",
data: {
msg: "父组件传参",
},
});
</script>
没有任何值,父组件虽然传参过去了,但是子组件没接收到,所以子组件不显示
那为什么父组件自己不显示呢?
父组件与子组件是分开编译的,所以我认为是子组件产生的html覆盖了父组件的html

- 将slot加回到子组件,但是不给子组件这个插槽函数默认参数
<script>
Vue.component("my-list", {
template: `<div><p>位置1<slot></slot></p> 位置2<slot></slot><ul><li>位置3<slot></slot></li></ul></div>`,
});
var app = new Vue({
el: "#app",
data: {
msg: "父组件传参",
},
});
</script>
子组件只有通过才能接收父组件传递的值

- 父组件传参与子组件默认参数的PK,我们知道在函数中传递的实参会覆盖掉函数中的默认参数的
<div id="app">
<my-list> {{msg}} </my-list>
</div>
<script>
Vue.component("my-list", {
template: `<div><slot>子组件默认参数</slot></div>`,
});
var app = new Vue({
el: "#app",
data: {
msg: "父组件传参",
},
});
</script>
结果显示与函数效果一样:传递的实参会击败默认参数,slot也符合API的特性

具名插槽就是带名字的'函数',用slot接收参数时也要加上对应的name
具名插槽不会使用子组件的值
原始只用slot写法:
<div id="app">
<base-layout>
<div slot = 'header'>
我是父组件提供的头部
</div>
<div>
我是父组件提供的main部分
</div>
<div slot ="footer"></div>
</base-layout>
</div>
<script>
Vue.component('baseLayout',{
template:`
<div class="container">
<header>
<slot name="header">我是子组件提供的头部</slot>
</header>
<main>
<slot>我是子组件提供的main</slot>
</main>
<footer>
<slot name="footer">我是子组件提供的尾部</slot>
</footer>
</div>
`
})
var vm = new Vue({
el:"#app",
data:{
}
})
</script>
新写法:v-slot
注意 v-slot 只能添加在 上
现在 元素中的所有内容都将会被传入相应的插槽。任何没有被包裹在带有 v-slot 的 中的内容都会被视为默认插槽的内容
<div id="app">
<base-layout>
<template v-slot:header>
<div>
我是父组件提供的头部
</div>
</template>
<div>
我是父组件提供的main部分
</div>
<template v-slot:footer>
<div></div>
</template>
</base-layout>
</div>
<script>
Vue.component('baseLayout',{
template:`
<div class="container">
<header>
<slot name="header">我是子组件提供的头部</slot>
</header>
<main>
<slot>我是子组件提供的main</slot>
</main>
<footer>
<slot name="footer">我是子组件提供的尾部</slot>
</footer>
</div>
`
})
var vm = new Vue({
el:"#app",
data:{
}
})
</script>
作用域插槽,父组件访问到子组件中的数据
Vue slot插槽通俗解释的更多相关文章
- Vue slot插槽内容分发
slot插槽使用 使用场景,一般父组件中又一大段模板内容需要运用到子组件上.或者更加复杂的,子组件需要运用到父组件大段模板内容,而子组件却不知道挂载的内容是什么.挂载点的内容是由父组件来决定的. Sl ...
- Vue slot插槽
插槽用于内容分发,存在于子组件之中. 插槽作用域 父级组件作用域为父级,子级组件作用域为子级,在哪定义的作用域就在哪. 子组件之间的内容是在父级作用域的,无法直接访问子组件里面的数据. 插槽元素 &l ...
- Vue slot 插槽用法:自定义列表组件
Vue 框架的插槽(slot)功能相对于常用的 v-for, v-if 等指令使用频率少得多,但在实现可复用的自定义组件时十分有用.例如,如果经常使用前端组件库的话,就会经常看到类似的用法: < ...
- vue slot插槽的使用
slot插槽的使用场景 父组件向子组件传递dom时会用到插槽 作用域插槽:当同一个子组件想要在不同的父组件里展示不同的状态,可以使用作用域插槽.展示的状态由父组件来决定 注:想要修改父组件向子 ...
- vue slot插槽的使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue slot 插槽详解
插槽含义:就是引入子组件后,在插入子组件元素中添加信息或者标签,使得子组件的指定位置插入信息或者标签 插槽有三种:默认插槽.具名插槽.作用域插槽,由于vue2.6.0后对插槽进行修改,但是兼容2.6. ...
- vue slot 插槽备忘
老是记不住插槽咋回事 记录下来备忘 父组件 <tab><template slot="boy" slot-scope="test">{{ ...
- vue slot插槽v-show不控制显示隐藏
vue中想控制插槽的显示隐藏,用v-show是不起任何作用的,改用v-if 可以生效.
- Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件
之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...
随机推荐
- ios网络访问官方演示程序
官方演示程序 AppDelegate 设置缓存 NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * ...
- Swift入门
Swift 入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者工 ...
- python语句与函数
赋值语句 : 分支语句 : 函数 :根据输入参数产生不同输出功能 程序的输入与输出 input() 从控制台获得用户输入的函数 使用格式 print()函数 以字符形式向控制台输出结果的函数 字符类型 ...
- elasticsearch 索引清理脚本及常用命令
elastic索引日志清理不及时,很容易产生磁盘紧张,官网给出curl -k -XDELETE可以清理不需要的索引日志. 清理脚本 #!/bin/bash #Author: 648403020@qq. ...
- TX-LCN分布式事务框架使用
官方文档相关: GitHub地址:https://github.com/codingapi/tx-lcn 官方文档:https://www.codingapi.com/docs/txlcn-prefa ...
- 面向对象技术-原文转载自jingwhale
面向对象技术 --原文转载自jingwhale,文章底部附原文链接 对象是面向对象的程序设计的核心,它由描述状态的属性(变量)和用来实现对象行为的方法(函数)组成,完成了从数据模型到处理模型的结合与统 ...
- vue 项目中实时请求接口 建立长连接
需求:在项目中需要每隔五秒请求一次接口 第一种方法:直接在mounted钩子函数中处理 mounted() { window.setInterval(() => { setTimeout(thi ...
- Halcon使用骨架法处理激光条并拟合直线
dev_close_window () * 设置颜色 dev_set_color ('green') * 读取图像 read_image (Image, 'images3/1') * 获得图像尺寸 g ...
- python获取某视频网站视频
还是老生常谈的操作 import requests import os from bs4 import BeautifulSoup from urllib.parse import urljoin h ...
- Azure Storage 系列(七)使用Azure File Storage
一,引言 今天我们开始介绍 Storage 中的最后一个类型的存储----- File Storage(文件存储),Azure File Storage 在云端提供完全托管的文件共享,这些共享项可通过 ...