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>

子组件里面:对应的函数是抽象的,它的效果就是将参数渲染到页面中

现在做几组对照试验:

  1. 子组件中的template中只有 <slot></slot>能接收传参,现将<slot></slot>去掉
<script>
Vue.component("my-list", {
template: `<div></div>`,
});
var app = new Vue({
el: "#app",
data: {
msg: "父组件传参",
},
});
</script>

没有任何值,父组件虽然传参过去了,但是子组件没接收到,所以子组件不显示

那为什么父组件自己不显示呢?

父组件与子组件是分开编译的,所以我认为是子组件产生的html覆盖了父组件的html

  1. 将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>

子组件只有通过才能接收父组件传递的值

  1. 父组件传参与子组件默认参数的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插槽通俗解释的更多相关文章

  1. Vue slot插槽内容分发

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

  2. Vue slot插槽

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

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

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

  4. vue slot插槽的使用

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

  5. vue slot插槽的使用方法

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

  6. vue slot 插槽详解

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

  7. vue slot 插槽备忘

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

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

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

  9. Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件

    之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...

随机推荐

  1. Linux实战(12):解决Centos7 docker 无法自动补全

    环境:centos最小化安装,会出现一些命令无法自动补全的情况,例如在docker start 无法自动补全 start 命令,无法自动补全docker容器名字.出现这种情况的可参考以下操作: yum ...

  2. Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(4)

    前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)–技术流ken>,<Ansible常用模块介绍及使用(二)–技术流ken><Ansible剧本介绍及使用 ...

  3. ribbon源码之客户端

    客户端模块的核心功能是提供统一的用户请求操作接口. 接口定义 客户端模块的核心是IClient接口,定义了客户端网络请求的方法. public interface IClient<S exten ...

  4. 5.CyclicBarrier-栅栏

  5. redis入门指南(七)—— 安全、协议、管理工具及命令属性

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 安全 1.可以使用bind参数绑定一个地址,使redis只接受这个地址的连接. 2.使用requ ...

  6. 【转】postgreSQL​之autovacuum性能问题分析(二)

    如上篇文章提到,如果出现了autovacuum的问题,那么这可能是个悲伤的故事.怎么解决? 笔者觉得可以从如下几个方面着手去考虑解决问题,可以避免一些坑.1) 持续观察,是不是autovacuum问题 ...

  7. springboot:This application has no explicit mapping for /erro

    springboot启动没有报错,但是访问的时候返回如上图的错误.看报错内容感觉是没有这个mapping对应的接口.但是确实写了. 最终发现是因为springboot的启动类放的位置不对.启动类所在的 ...

  8. 在vue中使用天气插件

    在vue中使用天气插件 插件网址:  中国天气 选择自己需要的插件.生成代码复制即可 在 vue 中的使用: template 中 <div id="weather-v2-plugin ...

  9. python_用户登录验证

    登录验证,三次机会,如何做? 1. 一个用户列表记录合法密码和用户名,一个小黑屋列表记录输错3次的用户, 一个中间列表记录所有用户输入,统计某个用户是否输错3次 2. 通过 in 判断一个元素是否在一 ...

  10. Python练习题 038:Project Euler 010:两百万以内所有素数之和

    本题来自 Project Euler 第10题:https://projecteuler.net/problem=10 # Project Euler: Problem 10: Summation o ...