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 ...
随机推荐
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
- USB 设备驱动(写给自己看的)
集线器与控制器(USB地址7bit) 设备,配置,端点,接口 USB1.0(低速1.2),1.1(全速450m),2.0(高速,电流传输)区别 引脚4根(V,D-,D+,gnd),miniUSB增加 ...
- 内存管理初始化源码1:setup_arch
源码声明:基于Linux kernel 3.08 1. 在kernel/arch/mips/kernel/head.S中会做一些特定硬件相关的初始化,然后会调用内核启动函数:start_kernel: ...
- 踩坑了,JDK8中HashMap依然会死循环!
是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题. 然而事实并非如此.少年可曾了解一种红黑树成环的场景,=v= ...
- Java多线程--原子性、可见性、有序性
计算机的内存模型: 计算机在运行行程序的时候,指令由CPU执行,计算机上数据存放在物理内存当中,CPU在执行指令的时候免不了要和数据打交道.刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行 ...
- Vue中computed分析
Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...
- Vue学习笔记使用系列一【表单】
脚手架的搭建,请查看另外一篇日记:https://www.cnblogs.com/Fengge518/p/11837078.html 1:直接代码了 1 <!DOCTYPE html> 2 ...
- 中秋国庆8天挑战赛 之 挑战8天掌握微信小程序
中秋国庆8天挑战赛 挑战8天掌握微信小程序 当前学习进度: // 10.1// 学习内容:// 10.2// 学习内容:// 10.3// 学习内容:// 10.4// 学习内容:// ...
- [Vue warn]: Error in render: "TypeError: Cannot read property 'matched' of undefined" found in <App> at src/App.vue
当用Vue模块化开发时,输入 http://localhost:8080 页面没有显示,首先按F12,检查是否有如下错误 话不多说,直接看下面: 解决方法1 如果是上面出的问题,以后就要注意了哦, ...
- 山寨一个Spring的@Component注解
1. 前言 我们在上一篇对Mybatis如何将Mapper接口注入Spring IoC进行了分析,有同学问胖哥这个有什么用,这个作用其实挺大的,比如让你实现一个类似@Controller的注解(或者继 ...