gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

vue渲染函數(shù)使用哪個(gè)命令

vue渲染函數(shù)使用“render”命令。vue中是使用模板HTML語(yǔ)法組建頁(yè)面的,使用render函數(shù)可以用js語(yǔ)言來(lái)構(gòu)建DOM。因?yàn)関ue是虛擬DOM,所以在拿到template模板時(shí)也要轉(zhuǎn)譯成VNode的函數(shù),而用render()函數(shù)構(gòu)建DOM,vue就免去了轉(zhuǎn)譯的過(guò)程。

vue渲染函數(shù)使用哪個(gè)命令

本教程操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

在絕大多數(shù)情況下,Vue 推薦使用模板語(yǔ)法來(lái)創(chuàng)建應(yīng)用。然而在某些使用場(chǎng)景下,我們真的需要用到 JavaScript 完全的編程能力。這時(shí)渲染函數(shù)–render就派上用場(chǎng)了。

1. render函數(shù)的介紹

簡(jiǎn)單的說(shuō),在vue中我們使用模板HTML語(yǔ)法組建頁(yè)面的,使用render函數(shù)我們可以用js語(yǔ)言來(lái)構(gòu)建DOM。 因?yàn)関ue是虛擬DOM,所以在拿到template模板時(shí)也要轉(zhuǎn)譯成VNode的函數(shù),而用render函數(shù)構(gòu)建DOM,vue就免去了轉(zhuǎn)譯的過(guò)程。

當(dāng)使用render函數(shù)描述虛擬DOM時(shí),vue提供一個(gè)函數(shù),這個(gè)函數(shù)是就構(gòu)建虛擬DOM所需要的工具。官網(wǎng)上給它起了個(gè)名字叫createElement。還有約定的簡(jiǎn)寫(xiě)叫h。

1.1 虛擬 DOM

Vue 通過(guò)建立一個(gè)虛擬 DOM 來(lái)追蹤自己要如何改變真實(shí) DOM。請(qǐng)仔細(xì)看這行代碼:

return createElement('h1', this.blogTitle)
登錄后復(fù)制

createElement 到底會(huì)返回什么呢?其實(shí)不是一個(gè)實(shí)際的 DOM 元素。它更準(zhǔn)確的名字可能是createNodeDescription,因?yàn)樗男畔?huì)告訴 Vue 頁(yè)面上需要渲染什么樣的節(jié)點(diǎn),包括及其子節(jié)點(diǎn)的描述信息。我們把這樣的節(jié)點(diǎn)描述為“虛擬節(jié)點(diǎn) (virtual node)”,也常簡(jiǎn)寫(xiě)它為“VNode”。“虛擬 DOM”是我們對(duì)由 Vue 組件樹(shù)建立起來(lái)的整個(gè) VNode 樹(shù)的稱呼。

1.2 createElement 接受的參數(shù)

// @returns {VNode} createElement(   // {String | Object | Function}   // 一個(gè) HTML 標(biāo)簽名、組件選項(xiàng)對(duì)象,或者   // resolve 了上述任何一種的一個(gè) async 函數(shù)。必填項(xiàng)。   'div',    // {Object}   // 一個(gè)與模板中屬性對(duì)應(yīng)的數(shù)據(jù)對(duì)象。可選。   {     // (詳情見(jiàn)1.3)   },    // {String | Array}   // 子級(jí)虛擬節(jié)點(diǎn) (VNodes),由 `createElement()` 構(gòu)建而成,   // 也可以使用字符串來(lái)生成“文本虛擬節(jié)點(diǎn)”。可選。   [     '先寫(xiě)一些文字',     createElement('h1', '一則頭條'),     createElement(MyComponent, {       props: {         someProp: 'foobar'       }     })   ] )
登錄后復(fù)制

1.3 render函數(shù)的使用

render:(h) => {   return h('div',{     // 給div綁定class屬性     class: {       child: true,       more: false     },   // 給div綁定樣式   style:{     width:'200px',       height:'200px',   },    // 給div綁定點(diǎn)擊事件       on: {       click: () => {         console.log('點(diǎn)擊事件')       }     },   }) }
登錄后復(fù)制

1.4 深入render函數(shù)數(shù)據(jù)對(duì)象

正如 v-bind:class 和 v-bind:style 在模板語(yǔ)法中會(huì)被特別對(duì)待一樣,它們?cè)?VNode 數(shù)據(jù)對(duì)象中也有對(duì)應(yīng)的頂層字段。該對(duì)象也允許你綁定普通的 HTML attribute,也允許綁定如 innerHTML 這樣的 DOM 屬性 (這會(huì)覆蓋 v-html 指令)

{   // 與 `v-bind:class` 的 API 相同,   // 接受一個(gè)字符串、對(duì)象或字符串和對(duì)象組成的數(shù)組   'class': {     foo: true,     bar: false   },   // 與 `v-bind:style` 的 API 相同,   // 接受一個(gè)字符串、對(duì)象,或?qū)ο蠼M成的數(shù)組   style: {     color: 'red',     fontSize: '14px'   },   // 普通的 HTML attribute   attrs: {     id: 'foo'   },   // 組件 prop   props: {     myProp: 'bar'   },   // DOM 屬性   domProps: {     innerHTML: 'baz'   },   // 事件監(jiān)聽(tīng)器在 `on` 屬性內(nèi),   // 但不再支持如 `v-on:keyup.enter` 這樣的修飾器。   // 需要在處理函數(shù)中手動(dòng)檢查 keyCode。   on: {     click: this.clickHandler   },   // 僅用于組件,用于監(jiān)聽(tīng)原生事件,而不是組件內(nèi)部使用   // `vm.$emit` 觸發(fā)的事件。   nativeOn: {     click: this.nativeClickHandler   },   // 自定義指令。注意,你無(wú)法對(duì) `binding` 中的 `oldValue`   // 賦值,因?yàn)?Vue 已經(jīng)自動(dòng)為你進(jìn)行了同步。   directives: [     {       name: 'my-custom-directive',       value: '2',       expression: '1 + 1',       arg: 'foo',       modifiers: {         bar: true       }     }   ],   // 作用域插槽的格式為   // { name: props => VNode | Array<VNode> }   scopedSlots: {     default: props => createElement('span', props.text)   },   // 如果組件是其它組件的子組件,需為插槽指定名稱   slot: 'name-of-slot',   // 其它特殊頂層屬性   key: 'myKey',   ref: 'myRef',   // 如果你在渲染函數(shù)中給多個(gè)元素都應(yīng)用了相同的 ref 名,   // 那么 `$refs.myRef` 會(huì)變成一個(gè)數(shù)組。   refInFor: true }
登錄后復(fù)制

1.5 約束

組件樹(shù)中的所有 VNode 必須是唯一的。

這意味著,下面的渲染函數(shù)是不合法的:

render: function (createElement) {   var myParagraphVNode = createElement('p', 'hi')   return createElement('div', [     // 錯(cuò)誤 - 重復(fù)的 VNode     myParagraphVNode, myParagraphVNode   ]) }
登錄后復(fù)制

如果你真的需要重復(fù)很多次的元素/組件,你可以使用工廠函數(shù)來(lái)實(shí)現(xiàn)。

例如,下面這渲染函數(shù)用完全合法的方式渲染了 20 個(gè)相同的段落:

render: function (createElement) {   return createElement('div',     Array.apply(null, { length: 20 }).map(function () {       return createElement('p', 'hi')     })   ) }
登錄后復(fù)制

2. render函數(shù)的應(yīng)用

2.1 渲染一個(gè)簡(jiǎn)單的元素

// app.vue (根組件)  <template>   <div id="app">     <myRender></myRender>   </div> </template>  <script> import myRender from './components/myRender' export default {   components:{     myRender   } } </script>
登錄后復(fù)制

// myRender.vue  <script> export default {   render:(h) => {     return h('div',{       class: {         child: true,         more: false       },       attrs: {         id: 'foo',         name: 'child'       },     style: {       width:'100%',         height:'200px',     },       domProps: {         innerHTML: '我是render渲染的子組件'       }     })   } } </script>  <style scoped> .child {   background: pink   font-size 24px   letter-spacing 2px } .more {   background: red } </style>
登錄后復(fù)制

vue渲染函數(shù)使用哪個(gè)命令

2.2 添加子標(biāo)簽

<script> export default {   render:(h) => {     return h('div',       {         class: 'wrapper',         attrs: {           id: 'wrapper',         },       style: {         width:'100%',           height:'250px'       },       },[         h('h2','標(biāo)題'),         h('div',{           class: 'content',           attrs: {             id: 'content',           },           style:{             width:'800px',             height:'100px'           },           domProps:{             innerHTML:'我是內(nèi)容'           }         })       ]     )   } } </script>  <style scoped> .wrapper    background: pink   letter-spacing 2px   .content      margin 0 auto      background: red     color #ffffff     font-size 24px  </style>
登錄后復(fù)制

vue渲染函數(shù)使用哪個(gè)命令

2.3 使用 JavaScript 代替模板功能

只要在原生的 JavaScript 中可以輕松完成的操作,Vue 的渲染函數(shù)就不會(huì)提供專有的替代方法。

1、v-if 和 v-for 模板語(yǔ)法中:

<ul v-if="items.length">   <li v-for="item in items">{{ item.name }}</li> </ul> <p v-else>No items found.</p>  <script> export default {   data(){     return{       items:[1,2,3]     }   } } </script>
登錄后復(fù)制

render函數(shù)實(shí)現(xiàn):

<script> export default {   render: function (createElement) {     if (this.items.length) {       return createElement('ul', this.items.map(function (item) {         return createElement('li', item.name)       }))     } else {       return createElement('p', 'No items found.')     }   },   data(){     return{       items:[1,2,3]     }   } } </script>
登錄后復(fù)制

2、v-model

<script> export default {   render:function(createElement) {     var self = this     return createElement('div',[         createElement('div',{class: 'showContent'},self.inputValue),         createElement('input',{           class: 'content',           domProps:{             value:self.inputValue           },           on:{             input:function(event){               self.inputValue = event.target.value             }           }         })       ]     )   },   data(){     return{       inputValue:''     }   },   watch:{     inputValue:function(){       console.log(this.inputValue)     }   }, } </script>  <style scoped> .showContent   font-size 32px   letter-spacing 2px .content    margin 10px auto    color blue   font-size 24px </style>
登錄后復(fù)制

vue渲染函數(shù)使用哪個(gè)命令

2.4 靜態(tài)插槽

this.$slots的用法

1、父組件

<template>   <div id="app">     <myRender>       <template v-slot:header>         <div >           頭部         </div>       </template>       <template #footer>         <div >           腳部         </div>       </template>     </myRender>   </div> </template>  <script> import myRender from './components/myRender' export default {   components:{     myRender   } } </script>
登錄后復(fù)制

2、子組件

<script> export default {   render:function(createElement) {     let childHeader = this.$slots.header     let childFooter = this.$slots.footer     return createElement(       'div',       {         class: 'showContent',         style:{           width:'100%'         }       },       [         createElement('div',{class:'childHeader'},childHeader),         createElement('div',childFooter),       ]     )   }, } </script>  <style scoped> .showContent   letter-spacing 2px   background-color red   .childHeader      color blue     font-size 24px </style>
登錄后復(fù)制

vue渲染函數(shù)使用哪個(gè)命令

2.5 作用域插槽

this.$scopedSlots的用法

1、父組件

<template>   <div id="app">     <myRender :myLayout="layout">       <template slot-scope="childMsg">         <div >           {{childMsg.text}}         </div>       </template>     </myRender>   </div> </template>  <script> import myRender from './components/myRender' export default {    data(){     return{       layout:{         header:'頭部',         footer:'腳部'       }     }   },   components:{     myRender   } } </script>
登錄后復(fù)制

2、子組件

<script> export default {   render:function(createElement) {     let self = this     return createElement(       'div',       {         style:{           width:'100%'         },       },[         self.$scopedSlots.default({           text: this.myLayout.header         })       ]     )   },   props:{     myLayout:Object   } } </script>
登錄后復(fù)制

vue渲染函數(shù)使用哪個(gè)命令

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
小泽玛利亚av在线| 四虎1515hh.com| 久久久久久www| 国产激情片在线观看| 在线免费看污网站| 五月花丁香婷婷| 国产aⅴ爽av久久久久| 黄色三级视频片| 天天操天天爱天天爽| 黄色片在线免费| 国内外成人免费在线视频| 91福利国产成人精品播放| 91精品无人成人www| wwwwwxxxx日本| 亚洲精品永久视频| 成人午夜免费剧场| 国产极品尤物在线| 99草草国产熟女视频在线| 少妇一级淫免费放| 欧美日韩一级在线| 国产精品专区在线| 成年人视频在线免费| 中文字幕66页| 免费在线看黄色片| 久久久久久久久久久免费视频| 中文字幕天天干| 日本黄色播放器| 国产午夜大地久久| 亚洲av无日韩毛片久久| 国产精品自拍合集| 大肉大捧一进一出好爽动态图| 欧美成人福利在线观看| 无颜之月在线看| 男女啪啪网站视频| 日韩国产小视频| 丰满少妇在线观看| 草草视频在线免费观看| 激情内射人妻1区2区3区| 三级网在线观看| 黄色一级二级三级| 久久这里只有精品18| 五月婷婷六月丁香激情| 91动漫在线看| 日日夜夜精品视频免费观看| 黄色av网址在线播放| 热这里只有精品| 男女视频在线看| 草草久久久无码国产专区| av电影一区二区三区| 老熟妇仑乱视频一区二区| 9191国产视频| av动漫免费观看| 自拍偷拍21p| www.日本xxxx| 国产a视频免费观看| www.好吊操| 老司机午夜网站| 污免费在线观看| 国产成年人视频网站| 亚洲综合欧美激情| 国产日韩一区二区在线观看| 俄罗斯av网站| 少妇人妻在线视频| 妞干网在线视频观看| 无码人妻精品一区二区蜜桃网站| 午夜xxxxx| 99国产精品久久久久久| 久久婷五月综合| 三级视频中文字幕| 国产九九在线观看| 午夜精品中文字幕| 激情在线观看视频| 国产av不卡一区二区| 色香蕉在线观看| 青草全福视在线| www.射射射| 美女av免费在线观看| 久久无码高潮喷水| 精品少妇无遮挡毛片| 一级片视频免费观看| 午夜福利123| 天堂а√在线中文在线| 精品视频在线观看一区| 精品www久久久久奶水| 欧美精品性生活| 久久99国产精品一区| 人妻少妇精品久久| 一级特黄性色生活片| 北条麻妃亚洲一区| 黄网站欧美内射| 一区二区三区国产免费| 天天久久综合网| 男人添女人荫蒂免费视频| 国产二区视频在线播放| 欧美特级aaa| 成年人看的毛片| 欧美三级午夜理伦三级富婆| 黄瓜视频免费观看在线观看www| 99色这里只有精品| 91国产精品视频在线观看| 日本一二三区视频在线| 熟女人妇 成熟妇女系列视频| 色噜噜狠狠一区二区三区狼国成人| 久久久99精品视频| 中文字幕成人在线视频| 国产午夜福利100集发布| 手机免费看av网站| a在线视频观看| 欧美 日韩 国产 在线观看| 国产麻花豆剧传媒精品mv在线| 涩涩网站在线看| 人妻无码视频一区二区三区| 91免费国产精品| 日韩av自拍偷拍| 成人午夜激情av| 国产肥臀一区二区福利视频| ijzzijzzij亚洲大全| 天堂网在线免费观看| 男人亚洲天堂网| 九九爱精品视频| 强伦女教师2:伦理在线观看| 日本人视频jizz页码69| 美女福利视频在线| 少妇人妻在线视频| 99久久国产综合精品五月天喷水| 天堂在线中文在线| 国产原创精品在线| 午夜久久久精品| 一级黄色香蕉视频| www日韩在线观看| 久久久精品三级| www.激情小说.com| www.精品在线| 天天综合成人网| 黄色免费高清视频| 好吊色这里只有精品| 中文字幕在线乱| 青青在线视频免费观看| 日本一本中文字幕| 国产一级爱c视频| 99精品视频在线看| 黄大色黄女片18第一次| 五月天开心婷婷| 日韩a级黄色片| 国产最新免费视频| 爱情岛论坛vip永久入口| 国产三级国产精品国产专区50| 粉色视频免费看| 操bbb操bbb| 国产乱子伦农村叉叉叉| 爆乳熟妇一区二区三区霸乳| av污在线观看| 成人午夜免费剧场| 亚洲成熟丰满熟妇高潮xxxxx| 91av在线免费播放| 在线观看视频在线观看| 黄色国产一级视频| 午夜免费一区二区| 国产精品久久成人免费观看| 免费人成在线观看视频播放| 激情婷婷综合网| 麻豆映画在线观看| 欧美三级午夜理伦三级| 免费在线观看污污视频| 999在线观看视频| 国产野外作爱视频播放| 伊人再见免费在线观看高清版 | 91免费视频网站在线观看| 亚洲 欧美 日韩系列| 三年中国中文在线观看免费播放| 欧美二区在线视频| 老司机av福利| 可以免费观看av毛片| 黄色一级视频播放| 色乱码一区二区三区在线| 久久久久久免费看| 中文字幕第一页在线视频| www.玖玖玖| japanese在线播放| 成人不卡免费视频| 午夜国产一区二区三区| 日本一道本久久| 丁香婷婷综合激情| 91亚洲一区二区| 久久综合伊人77777麻豆最新章节| 国产 国语对白 露脸| www.51色.com| 日日噜噜夜夜狠狠| 日韩欧美在线免费观看视频| 玩弄中年熟妇正在播放| 欧美日韩视频免费| av动漫在线播放| 国产亚洲精品久久久久久久| 青少年xxxxx性开放hg| 伊人五月天婷婷| 亚洲免费成人在线视频| 中文字幕天天干| 在线观看亚洲色图| 亚洲36d大奶网| 成人不卡免费视频|