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 ...
随机推荐
- ubuntu go环境安装搭建
一.安装必备环境 sudo apt-get install git golang-go vim sublime-text-installer 如果出现安装错误,进行修复安装: sudo apt-get ...
- Oracle列自增-12c
在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序列+触发器实现,到了12C ORACLE 引进了Identity Columns新特性,从而实现了列自增长功能. 一.Identity ...
- linux基础命令入门
1.使用mkdir 创建目录mkdir $HOME/testFolder 2.使用cd命令切换目录cd $HOME/testFolder 3.使用 cd ../ 命令切换到上一级目录cd ../ 4. ...
- 使用python函数持续监控电脑cpu使用率、内存、c盘使用率等
方法一: # import time 导入time模块 # import psutil 导入psutil模块 # def func(): # while True: ------->持续监控得w ...
- 去掉点击a标签时产生的虚线框
1.直接给a 标签添加属性:onfocus="this.blur()" 即可 For Example: <a onfocus="this.blur()" ...
- python if,循环的练习
1.变量值的交换 s1='alex' s2='SB' (s1,s2) = (s2,s1) 2.有存放用户信息的列表如下,分别存放用户的名字.年龄.公司信息 userinfo={ 'name':' ...
- CUDA编程模型——组织并行线程3 (2D grid 1D block)
当使用一个包含一维块的二维网格时,每个线程都只关注一个数据元素并且网格的第二个维数等于ny,如下图所示: 这可以看作是含有二维块的二维网格的特殊情况,其中块儿的第二个维数是1.因此,从块儿和线程索引到 ...
- C++使用指针的优点
使用指针可以带来如下的好处: (1)可以提高程序的编译效率和执行速度,使程序更加简洁. (2)通过指针被调用函数可以向调用函数处返回除正常的返回值之外的其他数据,从而实现两者间的双向通信. (3)利用 ...
- 初次接触Linux
最近由于工作需求,需要接触Linux系统. 使用VMware虚拟机,安装ubuntu系统.网上教程很多. 配置opencv环境.这是我参考的网上帖子https://blog.csdn.net/fish ...
- easyUI 学习
)省份-城市-区域三级联动[struts2 + ajax +非数据库版] (1)省份-城市-区域,基于jQuery的AJAX三级联动,用Struts2整合AJAX[非数据库版] $.ajax( { t ...