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. loadrunner做http接口的性能测试

    不用录制脚本的方法 步骤: 1.先打开Virtual User Generator——选择Web/HTTP协议,进入到主页面,这里不按照传统录脚本的方式输入url,所以直接叉掉录制脚本选项,进入下面的 ...

  2. myBatis源码解析-二级缓存的实现方式

    1. 前言 前面近一个月去写自己的mybatis框架了,对mybatis源码分析止步不前,此文继续前面的文章.开始分析mybatis一,二级缓存的实现.附上自己的项目github地址:https:// ...

  3. 数据库分表分区后的ID生成之雪花生成

    转自https://www.cnblogs.com/jajian/p/11101213.html 传统的单体架构的时候,我们基本是单库然后业务单表的结构.每个业务表的ID一般我们都是从1增,通过AUT ...

  4. Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型

    机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...

  5. java 集合删除数据

    public static void main(String[] args) { List<Integer> list = new ArrayList<>(Arrays.asL ...

  6. 爬虫必看,每日JS逆向之爱奇艺密码加密,今天你练了吗?

    友情提示:优先在公众号更新,在博客园更新较慢,有兴趣的关注一下知识图谱与大数据公众号,本次目标是抠出爱奇艺passwd加密JS代码,如果你看到了这一篇,说明你对JS逆向感兴趣,如果是初学者,那不妨再看 ...

  7. 操作系统(AIX)双因素身份认证解决方案-中科恒伦CKEY DAS

      一.场景分析 操作系统是管理计算机硬件与软件资源的计算机程序,用于工作中的进程管理.存储管理.设备管理.文件管理.作业管理等,十分重要,安全等级极高! 二.问题分析 1.密码设置简单,非常容易被撞 ...

  8. Processing 网格纹理制作(棋盘格)使用pixel() set()像素点绘制方式

    接上 我们趁热打铁,紧接上一回的棋盘格绘制,来挖掘一些不同绘制思路,使用pixel()函数来绘画.这是一个以每个像素点作为对象来绘制的思路,而不是以图形的方式来填充.这就改变了绘画思路.实际上,Pro ...

  9. mysql及联合查询

    SQL语句分类 DDL 数据库定义语言 定义数据库对象 create alter truncate drop TPL 事务处理语言 rollback commit DCL 数据控制语言 由 GRANT ...

  10. 如何自动填充SQL语句中的公共字段

    1. 前言 我们在设计数据库的时候一定会带上新增.更新的时间.操作者等审计信息. 之所以带这些信息是因为假如有一天公司的数据库被人为删了,尽管可能有数据库备份可以恢复数据.但是我们仍然需要追踪到这个事 ...