Vue基础-渲染函数-插槽
Vue 测试版本:Vue.js v2.5.13
先看个插槽的例子:
<div id="app">
<child >
<span slot-scope="props">
{{props.text}}
</span>
</child>
</div>
window.onload = function() {
Vue.component('child', {
template: `
<div>
<slot text="hello from child"></slot>
</div>
`,
});
new Vue({
el: '#app'
});
};
最终效果:

应该比较好理解,如果换成渲染函数,js 就是这样:
window.onload = function() {
Vue.component('child', {
render(createElement){
let vnodes1 = this.$scopedSlots.default({
text: 'hello from child'
});
return createElement('div',[vnodes1]);
}
});
new Vue({
el: '#app'
});
};
前后比较对照下,结合文档,应该能看懂;
但是插槽有很多种形式,具名与否,作用域与否等等,综合在一起,做了个 demo,代码如下:
<div id="app">
<myele>
<div>
default slot
</div>
<div slot="header">
header
</div>
<div slot-scope="props" slot="footer">
<div>footer from parent!</div>
<div>{{props.text}}</div>
</div>
</myele>
<child>
<span slot-scope="props">
{{props.text}}
</span>
</child>
</div>
如果依旧用 template ,js 就是这样:
window.onload = function() {
Vue.component('myele', {
template: `
<div>
<div>vnodes0</div>
<slot></slot>
<slot name="header"></slot>
<slot name="footer" text="footer child value"></slot>
<child>
<span slot-scope="props">{{props.text}}</span>
</child>
</div>
`
});
Vue.component('child', {
render(createElement) {
let vnodes1 = this.$scopedSlots.default({
text: 'hello from child'
});
return createElement('div', [vnodes1]);
}
});
new Vue({
el: '#app'
});
};
效果图:

如果用渲染函数实现,就是这样:
window.onload = function() {
Vue.component('myele', {
render(createElement) {
let vnodes0 = createElement('div', 'vnodes0'),
vnodes1 = this.$slots.default,
vnodes2 = this.$slots.header,
vnodes3 = this.$scopedSlots.footer({
text: 'footer child value'
}),
vnodes4 = createElement('child', {
scopedSlots: {
default: function(props) {
return createElement('span', props.text);
}
}
});
return createElement('div', [vnodes0, vnodes1, vnodes2, vnodes3, vnodes4]);
}
});
Vue.component('child', {
render(createElement) {
let vnodes1 = this.$scopedSlots.default({
text: 'hello from child'
});
return createElement('div', [vnodes1]);
}
});
new Vue({
el: '#app'
});
};
两边一对照,结合文档,应该就比较清楚了
参考文档:
https://cn.vuejs.org/v2/guide/render-function.html#插槽
https://cn.vuejs.org/v2/guide/components.html#使用插槽分发内容
Vue基础-渲染函数-插槽的更多相关文章
- Vue基础-渲染函数-父子组件-传递数据
Vue 测试版本:Vue.js v2.5.13 做了个 demo,把父子组件的数据都绑定到 Vue 实例 app 上,注释中的 template 相对好理解些 <div id="app ...
- vue render 渲染函数
vue render 渲染函数 经常看到使用render渲染函数的示例,而且在一些特殊情况下,确实更好使用,可以更加有效地细分组件,因而借助vue-element-admin来学习一波 render函 ...
- Vue.js 渲染函数, JSX(未掌握,未学完)
渲染函数 , JSX(没完成学习) 基础: 实例属性:vm.$slots default 属性包括了所有没有被包含在具名插槽中的节点. 渲染函数: render: function(createEle ...
- Vue基础篇之 插槽 slot
- Render渲染函数和JSX
1.Render函数:render是用来替换temlate的,需要更灵活的模板的写法的时候,用render. 官网API地址:https://cn.vuejs.org/v2/guide/render- ...
- 理解Vue中的Render渲染函数
理解Vue中的Render渲染函数 VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数.比如如下我想要实现 ...
- 从虚拟dom了解vue渲染函数
vue渲染函数就是render函数,他会返回一个VNode,VNode是一个js对象,是dom的映射 vue在介绍渲染函数那个章节看的不是很懂,所以想要彻底的理解渲染函数,首先需要了解vue的虚拟do ...
- vue从入门到进阶:渲染函数 & JSX(八)
Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接 ...
- Vue渲染函数
前面的话 Vue 推荐在绝大多数情况下使用 template 来创建HTML.然而在一些场景中,真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更 ...
随机推荐
- C++11新特性实验
#include <iostream> #include <vector> #include <map> #include <string> #incl ...
- MySQL 5.7 双主复制+keepalived,常规业务一般够用了
业务需求: 为Zabbix搭建2个数据库,一个库给服务器监控用,一个库给网络监控用. 硬件: 两台服务器,硬盘是1.2 T SSD卡,内存128G 架构: 希望做双主复制+keepalived,架构大 ...
- UIWebView和UICollectionViewController的使用
UIWebView和UICollectionViewController的使用 UIWebView UIWebView是iOS内置的浏览器的控件, 可以浏览网页, 打开文档等 .系统自带的Safari ...
- 基于jdom 的 xmluti
package cn.com.do1.wechat.common; import org.jdom.Attribute; import org.jdom.Document; import org.jd ...
- Unix系统编程()信号类型和默认行为
信号类型和默认行为 就是讲了有多少个信号类型 好多啊,后面用到了再看...
- 记录一个glibc 导致的段错误以及gdb 移植
上一篇我有相关关于一个段错误的记录,现在记录当时的段错误具体是在哪里的. // 从 GNU 的官网下载当前在使用的 glibc 的源代码以及最新的 glibc 源代码 // 地址如下: http:// ...
- https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL_转
转自:https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL 因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料, 这里做一个总结. 1. 首 ...
- window.parent.document解决原生js或jQuery 实现父窗口的问题
做WEB前端开发的过程中,经常会有这样的需求,用户点击[编辑]按钮,弹出一个对话框,在里边修改相应的值,然后把修改后的值显示在原页面,最后点击保存. 用window.parent.document.g ...
- js学习笔记23----窗口尺寸及窗口事件
窗口尺寸: 可视区的尺寸 document.documentElement.clientWidth document.documentElement.clientHeight 滚动距离 documen ...
- 第二百五十七节,Tornado框架-路由映射,逻辑处理,文件归类配置
Tornado框架-路由映射,逻辑处理,文件归类配置 Tornado框架 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起 ...