在使用vue自定义组件内容过程之中,我们绝大多数情况下都是通过预先写好不同的html模板,再通过props传入不同的值来渲染不同的模板。例如我们需要实现一个<v-title size='1'>组件。传入不同的size,标题显示不同的字号大小,我们可能这样去实现这个组件:
<template>
<h1 v-if='size==1'><slot></slot></h1>
<h2 v-if='size==2'><slot></slot></h1>
<h3 v-if='size==3'><slot></slot></h1>
</template>
这样做法显得代码过多,而且有时候我们需要真的JavaScript完全编程能力,即通过js代码生成html结构,再插入到页面之中。实现这样要求我们需要了解render函数。首先我们先了解三点
- render方法的实质就是生成template模板;
- 通过调用一个方法来生成,而这个方法是通过render方法的参数传递给它的;
- 这个方法有三个参数,分别提供标签名,标签相关属性,标签内部的html内容
下面通过一个element ui自定义表格表头内容的功能来展示render函数使用。
页面代码部分:
<el-table-column prop='timeSlice' :render-header="renderHeader">
<template slot-scope="scope">
{{scope.row.timeSlice}}
</template>
</el-table-column>
js部分:使用render函数
//自定义列标题内容
renderHeader(h, { column, $index },index){
return h('span', {}, [
h('span', {}, '时间片段'),
h('el-popover', { props: { placement: 'top-start', width: '200', trigger: 'hover', content: '领先/落后品类=单店平均单量-该品类城市店均单量' }}, [
h('i', { slot: 'reference', class:'el-icon-question'}, '')
])
])
},
实现效果:
可以看到第一个函数参数即 标签名,第二个为属性名组成的对象,第三个参数代表值,如果值依然包含html标签,我们可以使用数组来定义。以上就是本文全部内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。