vue Render函数

10 篇文章 0 订阅
8 篇文章 1 订阅

绝大多数情况下使用template来构建html,Render函数用来满足特点情况下完全使用JavaScript来编程

在遇到写类似的组件的时候需要写很多很长的代码,出于简洁(懒惰使人进步)的角度来说,我们应该找到更合适的方法来实现该效果。

[html]  view plain  copy
  1.   <body>  
  2.         <div id="app">  
  3.             <mycomment :level="2">  
  4.                 这是h2元素  
  5.             </mycomment>  
  6.         </div>  
  7.     </body>  
  8.     <script type="text/x-template" id="is">  
  9.   <div>  
  10.     <h1 v-if="level === 1">  
  11.       <slot></slot>  
  12.     </h1>  
  13.     <h2 v-if="level === 2">  
  14.         <slot></slot>  
  15.     </h2>  
  16.     <h3 v-if="level === 3">  
  17.       <slot></slot>  
  18.     </h3>  
  19.     <h4 v-if="level === 4">  
  20.       <slot></slot>  
  21.     </h4>  
  22.     <h5 v-if="level === 5">  
  23.       <slot></slot>  
  24.     </h5>  
  25.     <h6 v-if="level === 6">  
  26.       <slot></slot>  
  27.     </h6>  
  28.   </div>  
  29. </script>  
  30.     <script>  
  31.         Vue.component('mycomment',{  
  32.             template:'#is',  
  33.             props:{  
  34.                 level:{  
  35.                     type:Number,  
  36.                     required:true,  
  37.                 }  
  38.             }  
  39.         })  
  40.         var app =new Vue({  
  41.             el:'#app',  
  42.         })  
  43.   
  44.   
  45.     </script>  
这时候Render 函数就很好的解决了这个问题,先来简单一点额例子,算是有基本的骨架了

[html]  view plain  copy
  1. <body>  
  2.     <div id="app">  
  3.         <render-teample :level="4">  
  4.             render function  
  5.   
  6.         </render-teample>  
  7.     </div>  
  8.   
  9. </body>  
  10. <script>  
  11. Vue.component('render-teample',{  
  12.     render:function(createElement){  
  13.         return createElement(  
  14.             'h'+this.level,  
  15.             this.$slots.default  
  16.             )  
  17.     },  
  18.      props: {  
  19.     level: {  
  20.       type: Number,  
  21.       required: true  
  22.     }  
  23. }  
  24.   
  25.   
  26.     var app=new Vue({  
  27.         el:"#app",  
  28.   
  29.     });  
  30.   
  31.   
  32. </script>  

然后进一步给你的组件加入你想要的样式需要事件,变得有血有肉

[html]  view plain  copy
  1.   <body>  
  2.         <div id="app">  
  3.             <render-teample :level="4" >  
  4.   
  5.                 <div class="jah" slot="myslot">render function</div>  
  6.             </render-teample>  
  7.         </div>  
  8.   
  9.     </body>  
  10.     <script>  
  11.     Vue.component('render-teample',{  
  12.         render:function(createElement){  
  13.             return createElement(  
  14.                 'h'+this.level,  
  15.                 {  
  16.                     'class':{  
  17.                         show:true,  
  18.                         hide:false,  
  19.                     },  
  20.                     style:{  
  21.                         width:'200px',  
  22.                         height:'400px',  
  23.                         background:'red',  
  24.                     },  
  25.                     attrs:{  
  26.                         name:'h-ex',  
  27.                         id:'h-id'  
  28.                     },  
  29.                     props:{  
  30.                         myprops:true,  
  31.                     },  
  32.                      on: {  
  33.                     click: function(event){  
  34.                         alert(this.num)  
  35.                     }  
  36.                 },  
  37.                     nativeOn:{  
  38.                         click:function(event) {  
  39.   
  40.                             alert(1111)  
  41.                         }  
  42.                     }  
  43.   
  44.                 },  
  45.                 [  
  46.                     this.$slots.myslot,  
  47.                     createElement('div',{  
  48.                          domProps:{  
  49.                         innerHTML:'holle render'  
  50.                     }  
  51.                     })  
  52.                 ]  
  53.   
  54.                 )  
  55.         },  
  56.          props: {  
  57.         level: {  
  58.           type: Number,  
  59.           required: true  
  60.         }  
  61.     }  
  62. });  
  63.   
  64.         var app=new Vue({  
  65.             el:"#app",  
  66.             data:{  
  67.                 num:110  
  68.             }  
  69.   
  70.         });  
  71.   
  72.   
  73.     </script>  



注意:约束组件中 VNodes 必须是唯一的。

直接把所有元素写在一个createElement()下是很痛苦的,不利于维护。

所以通常会  var com1= createElement('p','item1');var com2= createElement('p','item1');

可以使用return createElement('div',[com1,com2])

这种情况是禁止的return createElement('div',[com1,com1])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值