vue slot 复用
有3步
- 第一步:创建渲染slot的组件 重要
- 第二步:为slot添加父组件数据(props) 重要
- 第三步:使用
第一步:创建渲染slot的组件
首选创建一个单文件组价,由于我们是使用的slot(父组件传进来的),所以,我们只需要创建js文件即可,而不用创建.vue文件
// slot.js
export default {
name: 'Slot', // slot的名字,调试使用
functional: true, // 使组件无状态 (没有 data ) 和无实例 (没有 this 上下文)。他们用一个简单的 render 函数返回虚拟节点使他们更容易渲染。
inject: ['Root'], // 父组件的映射
props: { // 此组件接受的props
data: Object,
options: Object
},
render: (h, ctx) => { // dom渲染函数
return h('div', ctx.injections.Root.$scopedSlots['icon']({ // 得到名为icon的作用域插槽
data: ctx.props.data, // 给slot的组件传递props
options: ctx.props.options
}));
}
};
第二步:为slot添加父组件数据(props)
// 导入子组件
import IconSlot from 'slot.js';
// 切换到父组件
export default {
name: 'IconTable',
components: {IconSlot},
provide () { // 该对象包含可注入其子孙的属性 在这里把父组件自身传递给子组件
return {
Root: this
};
},
data() {
return {
list: [],
options: {}
};
}
}
在模板中使用
<template>
<div v-for="(item, index) in list" :key="index">
<icon-slot :data="item" :options="options"></icon-slot>
</div>
</template>
第三步:使用
<icon-table>
<template slot="icon" slot-scope="{ list, options }">
<div v-if="list.length > 1"><Icon type="add"></Icon></div>
<div v-else><Icon type="del"></Icon></div>
</template>
</icon-table>
大功告成 总结
如果在父组件直接取this.$slot或this.$scopedSlots的话,
其实只能用一次
如果在模板中使用 slot 标签来接收的话,其实也只能只用一次
所以核心思路是;每次使用都必须重新创建VNode节点,那只能每次都使用createElement生成node,
那只有一个办法使用render渲染了,然后第一个参数创建dom后,dom附带的数据,都可以是一个对象,只要保证节点是唯一的即可,数据其实无所谓,怎么传都可以
vue slot 复用的更多相关文章
- Vue可复用过渡和动态过渡
前面的话 本文将详细介绍Vue可复用过渡和动态过渡 可复用过渡 过渡可以通过 Vue 的组件系统实现复用.要创建一个可复用过渡组件,需要做的就是将 <transition> 或者 < ...
- Vue slot 插槽用法:自定义列表组件
Vue 框架的插槽(slot)功能相对于常用的 v-for, v-if 等指令使用频率少得多,但在实现可复用的自定义组件时十分有用.例如,如果经常使用前端组件库的话,就会经常看到类似的用法: < ...
- LocalVariableTable之 Slot 复用
LocalVariableTable中的 Slot, 是存在复用现象的,这个我早就知道,但是,不太清楚是如何复用的. Java语言规范与JVM规范都没有对Java语言具体要如何使用JVM的局部变量sl ...
- jvm slot复用
如果当前字节码PC计数器的值已经超出了某个变量的作用域,那这个变量对应的Slot就可以交给其他变量使用. 字节码PC计数器就是程序计数器,程序计数器记录当前线程所执行的字节码的偏移地址.如果这个值超出 ...
- vue自学入门-4(vue slot)
vue自学入门-1(Windows下搭建vue环境) vue自学入门-2(vue创建项目) vue自学入门-3(vue第一个例子) vue自学入门-4(vue slot) vue自学入门-5(vuex ...
- vue slot nested bug
vue slot nested bug slot name bug Error <slot name="global-system-guide-slot"></s ...
- vue 组件复用 - component
vue 组件复用 - component vue 组件复用 就是对 component 标签的使用 先看图 下图看使用 结果: 可以看到 在箱包 这一项,我将banner 组件用了两次,我 每次 点击 ...
- Vue 组件复用性和slot
1.组件可复用 2.slot元素作为组件模板之中的内容分发插槽,元素自身可以被替换 <!DOCTYPE html> <html lang="en"> < ...
- Vue slot插槽
插槽用于内容分发,存在于子组件之中. 插槽作用域 父级组件作用域为父级,子级组件作用域为子级,在哪定义的作用域就在哪. 子组件之间的内容是在父级作用域的,无法直接访问子组件里面的数据. 插槽元素 &l ...
随机推荐
- 找不到visual studio模板信息 解决方法
菜单->工具->选项->项目和解决方案-> 将"Visual Studio 用户项目模板位置"指向vs安装目录:"E:/Program Fil ...
- 跨年呈献:HP-Socket for Linux 1.0 震撼发布
三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,HP-Socket for Linux v1.0 震撼发布!还是一样的接口,一样的高效,一样的简便,一样的味道. HP-Socket ...
- Postman 设置全局变量和环境变量设置(之 图形界面设置变量)
在Postman中有两种方法添加变量:1.图形界面操作添加 2.执行代码添加 1.图形界面操作添加,点击右上角齿轮按钮手动添加所需测试环境: 2.点击右上角的小眼睛可以编辑.添加“全局变量”和 ...
- ORM版学员管理系统 2
学生信息管理 展示学生信息 URL部分 url(r'^student_list/', app01_views.student_list, name="student_list"), ...
- eclipse启动tomcat访问http://localhost:8080 报404错误
eclipse正常启动tomcat,但是 访问http://localhost:8080 却报404错误 修改下配置 就好操作如下图 打开eclipse的server视图,双击配置好的那个tomcat ...
- 2018-2019-2 网络对抗技术 20165304 Exp5 MSF基础应用
2018-2019-2 网络对抗技术 20165304Exp5 MSF基础应用 原理与实践说明 1.实践原理 1).MSF攻击方法 主动攻击:扫描主机漏洞,进行攻击 攻击浏览器 攻击其他客户端 2). ...
- Servlet学习记录4
带进度条的文件上传 UploadServlet只实现了普通的文件上传,并附带普通文本域的提交.如果需要显示上传进度条,实时显示上传速度等,需要配合使用Ajax技术.这里仍然使用Apache的commo ...
- open()函数 linux中open函数使用
来源:http://www.cnblogs.com/songfeixiang/p/3733855.html linux中open函数使用 open函数用来打开一个设备,他返回的是一个整型变量,如果 ...
- DOM访问和处理HTML文档的标准方法
innerHTML获取或替换HTML元素的内容 <p id="d">对于错我无法来判断 </p><script type="text/jav ...
- python中os模块操作目录与文件名小结
(1). 创建目录: SigleDir = 'sigle_layer' MultiDir = 'D:\\Web\\multi_layer' 创建单层目录: os.mkdir(SigleDir) 创建多 ...