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 更 ...
随机推荐
- spring in action 7.1 小结
0 AbstractAnnotationConfigDispatcherServletInitializer剖析,在Servlet 3.0环境中,容器会在类路径中查找实现ServletContaine ...
- 使用ClipboardManager碰到Can't create handler inside thread that has not called Looper.prepare()
直接放上我的代码.希望能给碰到相同问题的朋友提供帮助 Runnable runnable = new Runnable() { public void run() { ClipboardManager ...
- Lambda编写斐波那契数列
还需要考虑溢出等问题,闲来无事写了写 Func<float, float, float> a = (arg1, arg2) => 0f;//init ; a = (lastNumbe ...
- Atitit. 解释器模式框架选型 and应用场景attilax总结 oao
Atitit. 解释器模式框架选型 and应用场景attilax总结 oao 1. 解释器模式结构描述 1 2. 如何实现(简单的解释器模式,仅仅通过词法分析即可实现,而无需token流进行处理. 2 ...
- Java并发之彻底搞懂偏向锁升级为轻量级锁
网上有许多讲偏向锁,轻量级锁的文章,但对偏向锁如何升级讲的不够明白,有些文章还相互矛盾,经过对jvm源码(biasedLocking.cpp)的仔细分析和追踪,基本升级过程有了一个清晰的过程,现将升级 ...
- 开启Visual Studio 2013时,出现Microsoft.VisualStudio.Web.PasteJson.JsonPackage无法载入的可能解決方案
1.先下载:http://www.jb51.net/dll/Microsoft.VisualStudio.Web.PasteJson.dll.html Microsoft.VisualStudio.W ...
- 16V554 的测试代码
//------------------------------------------------------------------------ #include "AT16C554 ...
- oozie调度中的重试和手工rerun一个workflow
在oozie中有Bundle.Coordinator和Workflow三种类型的job,他们之间可以有以下包含关系. Bundle > Coordinator > Workflow. 1. ...
- 如何解决PHP里大量数据循环时内存耗尽的问题
最近在开发一个PHP程序时遇到了下面的错误: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的 ...
- centos6.5 系统上升级2.6.6到2.7.12
因开发需要,今天把CentOS 6.4自带的Python2.6.6升级到了Python2.7.3.按照如下步骤进行升级 1.查看当前系统python的版本 python -V 2.下载2.7.3版本的 ...