在使用vue自定义组件内容过程之中,咱们绝大多数状况下都是经过预先写好不一样的html模板,再经过props传入不一样的值来渲染不一样的模板。例如咱们须要实现一个<v-title size='1'>组件。传入不一样的size,标题显示不一样的字号大小,咱们可能这样去实现这个组件:html
<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函数。首先咱们先了解三点vue
下面经过一个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标签,咱们能够使用数组来定义。以上就是本文所有内容。ui