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#使用插槽分发内容

最新文章

  1. powershell
  2. [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数
  3. Android PopupWindow 消失后的回掉方法
  4. light oj 1205 - Palindromic Numbers 数位DP
  5. C#的Socket简单实现消息发送
  6. 随便写写,当作了解--Css
  7. mac删除顽固图标
  8. wordpress教程之如何修改与制作wordpress的作者页面
  9. 《彻底搞定C指针》文档整理
  10. FUDCon - FedoraProject
  11. get方式提交中文乱码(两次编码,一次解码)
  12. yii2.0 集成/引入第三方sdk
  13. clang如何获得程序控制流图
  14. Python-Django 视图层
  15. 报错解决——OSError: libdarknet.so: cannot open shared object file: No such file or directory
  16. python django 访问static静态文件
  17. 本地IP,掩码,网关,DNS设置
  18. XStream将XML转javaben,出现多余的tag,导致出错
  19. H5音乐播放器【歌单列表】
  20. iOS键盘类型最全

热门文章

  1. [Jobdu] 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
  2. 验分享:CSS浮动(float,clear)通俗讲解
  3. filebeat+kafka失败
  4. 应用DataAdapter对象填充DataSet数据集
  5. RP2837 OUT1-OUT2 对应关系 2路DO
  6. Android——UI和View——控制方式
  7. PHP——内测:新闻管理练习题及答案(自己做的)
  8. 一、thinkphp
  9. php之道
  10. e2fsprogs 移植