国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

深入理解vue Render函數(shù)

2019-11-19 16:02:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最近在學(xué)習(xí)vue,正好今日留個(gè)筆記,我自己還在摸索學(xué)習(xí)中,現(xiàn)整理出來(lái)以作記錄。

會(huì)使用基本的Render函數(shù)后,就會(huì)想,這怎么用 v-for/v-if/v-model;我寫個(gè)vue Render函數(shù)進(jìn)階

首先是v-if 的轉(zhuǎn)化使用全局組件的v 值決定組件渲染的狀態(tài),對(duì)實(shí)例中傳遞的props的“nnum”值得控制可以自如的切換兩種狀態(tài)顯示。這樣就是和v-if 一樣使用組件了

<div id="app">     <mycom :v="nnum">       <div slot="slot2">hahahhah</div>       <div slot="slot1">ggggggggggggg</div>     </mycom>   </div>   <script>     Vue.component('mycom',{       render:function(createElement){         var s=this;         if(this.v==1){           return createElement('div',            {             domProps:{innerHTML:'component n='+this.n}            })         }else{            return createElement('div',             [this.$slots.slot1,this.$slots.slot2])         }       },       props:{         v:{           type:Number,           default:0         },         n:{           default:'hello'         }       }     });     var app=new Vue({       el:'#app',       data:{         nnum:1       }     }) 

v-for 的使用需要需要使用到map

<div id="app">     <mycom :v="nnum" :ar="arr">       <div slot="slot2">hahahhah</div>       <div slot="slot1">ggggggggggggg</div>     </mycom>   </div>   <script>     Vue.component('mycom',{       render:function(createElement){         if(this.v==1){           return createElement('div',               this.ar.map(function(item){                 return createElement('li',                   {                     domProps:{                       innerHTML:item                     }                   })               })            )         }else{            return createElement('div',             [this.$slots.slot1,this.$slots.slot2])         }       },       props:{         v:{           type:Number,           default:0         },         n:{           default:'hello'         },         ar:{           type:Array,           default:function(){ return [1,23,4,5,6,55,65]}         }        }     });     var app=new Vue({       el:'#app',       data:{         nnum:1,         arr:[1,2,3,4,5,6,7,8]       }     })   </script>   </body> 

只有map方法才能檢測(cè)改變,其他的方法不能根據(jù)數(shù)據(jù)的改變能改變相應(yīng)的狀態(tài)下的例子中的arr數(shù)組   依靠 apply的方法來(lái)實(shí)現(xiàn)的就不能夠檢測(cè)this.ar 的變換來(lái)重新計(jì)算

return createElement('div',              Array.apply(null,this.ar.map(function(item){                return createElement('li',                  {                    domProps:{                      innerHTML:'item'                    }                  })              }))
<body>   <div id="app">     <mycom :v="nnum" :ar="arr">       <div slot="slot2">hahahhah</div>       <div slot="slot1">ggggggggggggg</div>     </mycom>   </div>   <script>     Vue.component('mycom',{       render:function(createElement){         if(this.v==1){           return createElement('div',               this.ar.map(function(item){                 return createElement('li',                   {                     domProps:{                       innerHTML:item                     }                   })               })             )         }else{            return createElement('div',               Array.apply(null,this.ar.map(function(item){                 return createElement('li',                   {                     domProps:{                       innerHTML:'item'                     }                   })               }))             )         }       },       props:{         v:{           type:Number,           default:0         },         n:{           default:'hello'         },         ar:{           type:Array,           default:function(){ return [1,23,4,5,6,55,65]}         }        }     });     var app=new Vue({       el:'#app',       data:{         nnum:2,         arr:[1,2,3,4,5,6,7,8]       }     })   </script>   </body> 

v-model 使用domProps來(lái)實(shí)現(xiàn)雙向綁定

使用對(duì)value:賦值可以將數(shù)據(jù)綁定給 input 的默認(rèn)值,但是對(duì)input 的修改并不能傳遞給vue  這涉及到組件的通信問(wèn)題,
所以想實(shí)現(xiàn)雙向綁定,只能自己寫事件來(lái)出發(fā)  vue shu'j的傳遞

domProps:{value:self.v }
<body>   <div id="app">     <mycom :v="nnum" :ar="arr">       <div slot="slot2">hahahhah</div>       <div slot="slot1">ggggggggggggg</div>     </mycom>     <div>{{nnum}}</div>   </div>   <script>     Vue.component('mycom',{       render:function(createElement){         var self=this;         var inp=createElement('input',                   {                     domProps:{                       value:self.v                     }                   });           return createElement('div',[inp])          },       props:{         v:{           type:Number,           default:0         },         n:{           default:'hello'         },         ar:{           type:Array,           default:function(){ return [1,23,4,5,6,55,65]}         }        }     });     var app=new Vue({       el:'#app',       data:{         nnum:100,         arr:[1,2,3,4,5,6,7,8]       }     })   </script>   </body> 

通過(guò)input觸發(fā)undateValue來(lái)更新 app中的nnum 值(差點(diǎn)沒(méi)轉(zhuǎn)過(guò)彎來(lái),render過(guò)于復(fù)雜后,真的是自己找罪受)

<div id="app">     <mycom :v="nnum" :ar="arr" @input="updateValue">      </mycom>     <div>{{nnum}}</div>   </div>   <script>     Vue.component('mycom',{       render:function(createElement){         var self=this;         var inp=createElement('input',                   {                     domProps:{                       value:self.v                     },                     on:{                      input:function(event){                       self.$emit('input',event.target.value)                       }                     }                   });           return createElement('div',[inp])          },       props:{         v:{           type:Number,           default:0         },         n:{           default:'hello'         },         ar:{           type:Array,           default:function(){ return [1,23,4,5,6,55,65]}         }        },       methods:{         update:function(){          }       }     });     var app=new Vue({       el:'#app',       data:{         nnum:100,         arr:[1,2,3,4,5,6,7,8]       },       methods:{         updateValue:function(value){           this.nnum=parseFloat(value);         }       }     })    </script>   </body> 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑河市| 枣庄市| 萨迦县| 临城县| 来宾市| 昌吉市| 宕昌县| 长治县| 滨州市| 普定县| 介休市| 淮滨县| 安国市| 晋中市| 陇西县| 沾益县| 莱西市| 石台县| 长春市| 连南| 喀什市| 甘洛县| 肥西县| 离岛区| 上饶县| 巴南区| 宁都县| 钟山县| 新竹市| 民勤县| 德安县| 绥棱县| 杂多县| 厦门市| 肃北| 吉安市| 太康县| 慈利县| 神池县| 邓州市| 庆阳市|