刚开始我们淡淡提过<slot></slot>现在深入了解一下。

slot可以进行父组件传值到子组件。

比如:我们将hiboy通过<slot>传递到组件中。

<body>
<div id="app">
<hello>
Hi boy
</hello>
</div>
</body>
<script>
Vue.component("hello",{
data:function(){
return {
list:[1,2,3,4]
}
},
template:'<p><slot></slot></p>'
}) var app=new Vue({
el:'#app'
})
</script>

结果:

当然这不是今天想要讲的。今天我们来分析两种情况。

一、多个插槽传递不同内容

这个时候我们需要设值的关键参数有: slot=' youngam',name='young'   (youngam随便取的,前后一致即可)

例子:我们想要通过两个<slot>分别传递header和footer,<h3>content</h3>作为主要内容区,具体如下代码。

<body>
<div id="app">
<hello>
<div>header</div>
<div>footer</div>
</hello>
</div>
</body>
<script>
Vue.component("hello",{
template:`<div>
<slot></slot>
<h3>content</h3>
<slot></slot>
</div>`
}) var app=new Vue({
el:'#app'
})
</script>

错误结果:

大家可以发现header和footer被当作一个插值进行了两次传递,这当然不是我们想要的。

解决方法:

通过定义slot的值 <div slot="header">header</div>

组件中<slot name="header"></slot>

这样在插值时就会找对应的slot进行。

修改后代码:

<body>
<div id="app">
<hello>
<div slot="header">header</div><!--添加slot的值 -->
<div slot="footer">footer</div>
</hello>
</div>
</body>
<script>
Vue.component("hello",{
template:`<div>
<slot name="header"></slot> //与上面值对应(运行时删除备注)
<h3>content</h3>
<slot name="footer"></slot>
</div>`
}) var app=new Vue({
el:'#app'
})
</script>

二、作用域插槽(插槽Dom类型由父组件决定)

关键代码:slot-scope='变量名'

<template  slot-scope="youngam"></template>

例子:

现在我们的组件中有一个数组,通过v-for遍历到对应li标签中并实现显示。

代码:

<body>
<div id="app">
<hello>
</hello>
</div>
</body>
<script>
Vue.component("hello",{
data:function(){
return {
list:[1,2,3,4]
}
},
template:`<div>
<ul>
<li v-for='item in list'>{{item}}</li>
</ul>
</div>`
}) var app=new Vue({
el:'#app'
})
</script>

结果:

好的,正确显示。

但是,此时的ul和li是固定在组件中的,我们想要通过父组件传递标签实现循环时所显示的是什么标签(此时显示的是<li></li>)

具体做法:将需要传递的标签外面套一层<template slot-scope="随便一个变量名"></template>标签

具体代码:

<body>
<div id="app">
<hello>
<template slot-scope="youngam">
<h3>{{youngam.item}}</h3>
</template>
</hello>
</div>
</body>
<script>
Vue.component("hello",{
data:function(){
return {
list:[1,2,3,4]
}
},
template:`<div>
<ul>
<slot v-for='item in list' :item=item></slot>
</ul>
</div>`
}) var app=new Vue({
el:'#app'
})
</script>

这里将slot替换成了h3但数据是组件里的。通过  变量名.循环单个值  的形式可以获取到数据。

结果:

好了,具体类容还是看官方文档吧。

就是这样。

组件基础(插槽slot)—Vue学习笔记的更多相关文章

  1. 组件基础(参数校验和动态组件、v-once)—Vue学习笔记

    最最最后一点关于组件传值的问题. 提醒:本篇内容请使用Vue.js开发版!(附带完成的警告和提示) 1.组件的参数校验 父组件向子组件传值,子组件可以决定传值的一些限制. 比如,子组件指向接收Stri ...

  2. Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级

    (四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...

  3. vue学习笔记(八)组件校验&通信

    前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ...

  4. Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发

    ===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...

  5. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

  6. Vue学习笔记-2

    前言 本文非vue教程,仅为学习vue过程中的个人理解与笔记,有说的不正确的地方欢迎指正讨论 1.computed计算属性函数中不能使用vm变量 在计算属性的函数中,不能使用Vue构造函数返回的vm变 ...

  7. vue 学习笔记(二)

    最近公司赶项目,一直也没时间看 vue,之前看下的都快忘得差不多了.哈哈哈,来一起回顾一下vue 学习笔记(一)后,继续向下看嘛. #表单输入绑定 基础用法 v-model 会忽略所有表单元素的 va ...

  8. Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习

    一  使用环境: windows 7 64位操作系统 二  IDE:VSCode/PyCharm 三  Vue.js官网: https://cn.vuejs.org/ 四  下载安装引用 方式1:直接 ...

  9. Vue学习笔记-Django REST framework3后端接口API学习

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...

随机推荐

  1. SQL语句关联查询

    一:连接类型: 关联查询:只有存在关联的表才能关联查询,完全独立的表之间无法关联 1.关联的类型:自关联,左关联,右关联,全关联(full join)两张表都是主表 2.关联的表:两张以上,以一张(或 ...

  2. Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)

    https://codeforces.com/contest/1080/problem/F 题意 有k个区间,区间的种类有n种,有m个询问(n,m<=1e5,k<=3e5),每次询问a,b ...

  3. matlab 向量场线积分

    syms t x y z F x=cos(t); y=sin(t); z=*sin(t)^-; F=[x^*y , (/)*x^,x*y ] ; %场函数 V=[diff(x,t),diff(y,t) ...

  4. Livelock

    Unlike deadlock, livelocked packets continue to move through the network, but never reach their dest ...

  5. Apache hadoop安装配置

    1.网络中继更改问题 命令:   vi /etc/sysconfig/network-scripts/ifcfg-eth0 需要修改的代码 DEVICE=eth0 HWADDR=00:0C:29:11 ...

  6. VirtualBox安装增强工具时:Unable to install guest additions: unknown filesystem type 'iso9660'

    解决方法: sudo apt-get install --reinstall linux-image-$(uname -r) 参考:http://askubuntu.com/questions/596 ...

  7. MySQL 安装与使用(三)

    操作系统:CentOS release 5.10 (Final) MySQL版本:5.1.72-community 占位学习与编辑中……

  8. Ng第八课:神经网络表述(Neural Networks: Representation)

    8.1  非线性假设 8.2  神经元和大脑 8.3  模型表示 1 8.4  模型表示 2 8.5  特征和直观理解 1 8.6  样本和直观理解 II 8.7  多类分类 8.1  非线性假设 无 ...

  9. app.json

    APP.JSON 文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 TAB 等.相当于iOS开发中的AppDelegate 注意该文件不可添加任何注释. {   ...

  10. POJ3176--Cow Bowling(动态规划)

    The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...