刚开始我们淡淡提过<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. rails 辅助方法

    rails辅助方法全解: https://ruby-china.github.io/rails-guides/routing.html

  2. Java 读取HDFS文件系统

    最近有个需求,计算用户画像. 系统大概有800W的用户量,算每个用户的一些数据. 数据量比较大,算用hive还是毫无压力的,但是写的oracle,在给出数据给前端,就比较难受了. 然后换了种解决方法: ...

  3. 762. Prime Number of Set Bits in Binary Representation

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  4. css扩大超链接的点击范围

    给a标签设置display:block后,它会根据盒模型计算a标签的实际大小.这时候,你可以使用hover伪类使a的整个盒模型生效..link a{display:block;padding:2px ...

  5. 查看MySQL语句变量了多少行数据

    explain MySQL语句 列如 explain SELECT * FROM 表名 WHERE id=1;

  6. best-case analysis in real-time system

    ECRTS: Exact Best-Case Response Time Analysis of Fixed Priority Scheduled Tasks motivation Real-time ...

  7. Windows下python环境配置

    步骤: 1.安装Python.Sublime Text: 2.打开Sublime Text,在菜单栏点击“Tools”->“Build System”->“New Build System ...

  8. 程序员面试50题—sizeof的用法(6)

    以下为Windows下的32 位C++程序,请计算sizeof 的值void Func ( char str[100] ){sizeof( str ) = ?}void *p = malloc( 10 ...

  9. 动态生成PictureBox控件,涉及:PictureBox控件和flowLayoutPanel面板

    一.概述 flowLayoutPanel面板是一系列控件的容器,有关详细的使用方法留待以后总结. 二.问题提出 问题提出:点击按钮,扫描指定文件夹并将其中的所有图片放在flowLayoutPanel面 ...

  10. leaflet入门(四)API翻译(上)

    L.Map L.Marker L.Popup L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. Constructor(构造器) 通过div元素和带有地图选项的描述的文字对象来实 ...