日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解vue v-model

瀏覽:239日期:2022-12-02 09:44:35

1. v-model原理

vue中v-model是一個語法糖,所謂的語法糖就是對其他基礎功能的二次封裝而產生的功能。簡單點說,v-model本身就是父組件對子組件狀態(tài)以及狀態(tài)改變事件的封裝。其實現(xiàn)原理上分為兩個部分:

通過props設置子組件的狀態(tài)通過監(jiān)聽子組件發(fā)出的事件改變父組件的狀態(tài),從而影響子組件的props值通過以上兩個部分,實現(xiàn)了父組件的狀態(tài)和子組件狀態(tài)進行了綁定的效果。

1.1 demo

v-model使用示例

<!DOCTYPE html><html> <head> <meta charset='utf-8' /> <title>v-model示例</title> <script type='text/javascript' src='http://m.b3g6.com/bcjs/vue.js'></script> </head> <body> <div id='app'> <div>這里是父組件的狀態(tài):</div> <div style='margin-bottom: 15px;'>{{content}}</div> <Child v-model='content'></Child> </div> <template id='input'> <div> <div>這里是子組件的輸入?yún)^(qū)域:</div> <input :value='value' @input='contentChange' /> </div> </template> <script type='text/javascript'> var Child = { template: '#input', props: { value: { type: String, required: true } }, methods: { contentChange(value){ this.$emit('input', value.target.value); } } }; var vueInstance = new Vue({ el: '#app', components: {Child}, data: { content: '' } }) </script> </body></html>

在瀏覽器中打開上述html頁面,可以看到實時效果:在子組件中的input框中輸入內容可以在父組件區(qū)域實時顯示,達到了子組件中狀態(tài)和父組件狀態(tài)實時綁定的效果。

2. 修改v-model默認監(jiān)聽的事件和設置prop的名稱

v-model指令默認是在子組件上設置的prop名稱是value,默認監(jiān)聽子組件上的input事件,在上面的demo上,如果我們修改子組件contentChange函數(shù)中發(fā)出的事件名稱,在父組件中就無法實時獲取到子組件的輸入。

Vue中提供了通過在子組件上定義model屬性來修改這兩個參數(shù)名稱的功能,不過該功能需要在版本2.2以上才能使用,如下demo所示:

2.1 demo

<!DOCTYPE html><html> <head> <meta charset='utf-8' /> <title>v-model示例</title> <script type='text/javascript' src='http://m.b3g6.com/bcjs/vue.js'></script> </head> <body> <div id='app'> <div>這里是父組件的狀態(tài):</div> <div style='margin-bottom: 15px;'>{{content}}</div> <Child v-model='content'></Child> </div> <template id='input'> <div> <div>這里是子組件的輸入?yún)^(qū)域:</div> <input :value='content' @input='contentChange' /> </div> </template> <script type='text/javascript'> var Child = { template: '#input', model: { prop: 'content', event: 'contentChanged' }, props: { content: { type: String, required: true } }, methods: { contentChange(value){ this.$emit('contentChanged', value.target.value); } } }; var vueInstance = new Vue({ el: '#app', components: {Child}, data: { content: '' } }) </script> </body></html>

3. Vue中對v-model指令處理分析

基于Vue2.0版本,分析我們在標簽上寫上v-model屬性到vue組件實現(xiàn)響應的流程。

3.1 解析部分

3.1.1 在將HTML解析稱AST時,會解析HTML中標簽的屬性

function processAttrs(el){ ... name = name.replace(dirRE, ’’) // parse arg const argMatch = name.match(argRE) if (argMatch && (arg = argMatch[1])) { name = name.slice(0, -(arg.length + 1)) } addDirective(el, name, value, arg, modifiers) ...}

提取指令的名稱,v-model的指令名稱name為model,然后添加到實例的指令中

3.1.2 將指令相關內容添加到實例指令中

export function addDirective ( el: ASTElement, name: string, value: string, arg: ?string, modifiers: ?{ [key: string]: true }) { (el.directives || (el.directives = [])).push({ name, value, arg, modifiers })}

在實例的指令屬性中添加相應的指令,這樣就實現(xiàn)了從html上的屬性到Vue實例上指令格式的轉換

3.2 指令設置部分

在將html解析稱AST之后,實例對應的directives屬性上就有了我們設置的v-model相關的值,包括參數(shù)值value,name是model

3.2.1 調用指令的構造函數(shù)

function genDirectives (el: ASTElement): string | void { const dirs = el.directives if (!dirs) return let res = ’directives:[’ let hasRuntime = false let i, l, dir, needRuntime for (i = 0, l = dirs.length; i < l; i++) { dir = dirs[i] needRuntime = true const gen = platformDirectives[dir.name] || baseDirectives[dir.name] if (gen) { // compile-time directive that manipulates AST. // returns true if it also needs a runtime counterpart. needRuntime = !!gen(el, dir, warn) } ...}

在v-model指令的構造函數(shù)中會根據(jù)tag的種類進行不同的創(chuàng)建函數(shù)進行創(chuàng)建,如果我們自定義指令需要在子組件上添加屬性,也需要在這個函數(shù)里面進行操作

3.2.2 普通tag下的v-model指令構造過程

function genDefaultModel el: ASTElement, value: string, modifiers: ?Object): ?boolean { ... addProp(el, ’value’, isNative ? `_s(${value})` : `(${value})`) addHandler(el, event, code, null, true) ...} addProp在el上設置一個名稱為value的prop,同時設置其值 addHandler在el上設置事件處理函數(shù)

3.3 指令響應變化部分

3.3.1 createPatchFunction統(tǒng)一處理指令的鉤子函數(shù)createPatchFunction函數(shù)返回一個patch函數(shù),在patch處理過程中,會調用指令的鉤子函數(shù),包括:

bind inserted update componentUpdated unbind

4. 總結

4.1 編譯過程

從html上解析所設置的指令 通過gen*函數(shù)將指令設置到AST上 調用指令的構造函數(shù),設置指令需要在編譯時期處理的事情

4.2 初始化過程

通過在patch函數(shù)中,調用統(tǒng)一的鉤子函數(shù),觸發(fā)指令的鉤子函數(shù),實現(xiàn)相應的功能

以上就是詳解vue v-model的詳細內容,更多關于vue v-model的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品亚洲四区在线观看| 免费欧美一区| 999精品在线| 美女网站视频一区| 福利精品一区| 精品午夜av| 成人午夜毛片| 久久久久午夜电影| 性欧美长视频| 视频一区国产视频| 亚洲资源av| 亚洲精品在线国产| 日本欧美大码aⅴ在线播放| 亚洲精品黄色| 国产成人免费| 欧美日韩国产高清电影| 999国产精品永久免费视频app| 999国产精品永久免费视频app| 99久久激情| 蜜桃av一区二区| 国产美女亚洲精品7777| 美女视频一区在线观看| 特黄毛片在线观看| 亚洲激情婷婷| 美女在线视频一区| 日韩成人亚洲| 日韩高清在线不卡| 日韩不卡一区| 亚洲精品精选| 国产精品伦理久久久久久| 香蕉久久国产| 久久精品免费看| 日韩亚洲一区在线| 日韩1区2区日韩1区2区| 久久精品一本| 国产精品7m凸凹视频分类| 日本欧美大码aⅴ在线播放| 久久久久.com| 国产三级一区| 不卡一区2区| 欧美日韩91| 伊人久久亚洲热| 成人午夜网址| 日韩av不卡在线观看| 好吊日精品视频| 成人精品高清在线视频| 中文亚洲欧美| 日产精品一区二区| 欧美亚洲自偷自偷| 日韩在线播放一区二区| 欧美69视频| 欧美一区二区性| 美女久久久久久 | 桃色av一区二区| 国产精品一区二区三区四区在线观看| 香蕉精品视频在线观看| 日韩激情一区| 日韩成人a**站| 国产精品99久久免费观看| 日本在线观看不卡视频| 蜜臀国产一区二区三区在线播放 | 日韩亚洲国产欧美| 91高清一区| 日韩视频久久| 最新日韩av| 欧美特黄一区| 亚洲一区二区毛片| 一区二区精彩视频| 欧美资源在线| 少妇高潮一区二区三区99| 欧美伊人久久| 国产精品www994| 国产精品片aa在线观看| 精品日产乱码久久久久久仙踪林| 日本成人中文字幕| 国产精品一区二区中文字幕| 国产精品一区二区三区四区在线观看| 欧美亚洲二区| 精品国产欧美日韩| 国产国产精品| 色8久久久久| 精品国产亚洲一区二区三区在线| 精品视频网站| 亚洲欧洲日本mm| 日韩不卡一二三区| 91综合网人人| 国产精品99免费看| 在线日韩成人| 久久精品欧洲| 欧美a级片一区| 国产亚洲久久| 99热国内精品| 国产精品17p| 亚洲综合日韩| 精品视频国产| 亚洲精品大片| 久久久久久久久丰满| 视频精品一区| 久久中文视频| 成人午夜亚洲| 婷婷久久免费视频| 91看片一区| 国产日韩一区| 中文字幕一区二区三区在线视频| 免费在线亚洲欧美| 日韩国产精品久久久| 日韩大片免费观看| 国产精品久久久久久模特| 女主播福利一区| 成人亚洲欧美| 国产精品草草| 日韩精品三级| 中文欧美日韩| 日韩视频二区| 久久精品免费一区二区三区 | 日韩超碰人人爽人人做人人添| 成人精品亚洲| 国产一区日韩| 国产精品115| 欧美偷窥清纯综合图区| 日韩中文字幕无砖| 免费看黄色91| 视频一区欧美精品| 久久最新视频| 久久国产精品久久久久久电车| 欧美性感美女一区二区| 欧美精品日日操| 欧美日韩在线网站| 尤物tv在线精品| 日韩欧美不卡| 亚洲精品一区三区三区在线观看| 国产一区一一区高清不卡| 麻豆精品久久| 免费观看亚洲| 亚洲精品一级二级| 在线国产一区二区| 亚洲涩涩av| 国产免费av一区二区三区| 久久中文欧美| 久久精品动漫| 久久成人国产| 红杏一区二区三区| 久久国产电影| 亚洲精品日本| 国产精品极品| 国产91在线精品| 亚洲成人三区| 蜜臀91精品一区二区三区| 国产精品亚洲人成在99www| 欧美二三四区| 日本va欧美va精品发布| 亚洲综合电影| 爽爽淫人综合网网站| 麻豆91小视频| 日本大胆欧美人术艺术动态| 国产精品最新| 国产综合激情| 国产精品白浆| 亚洲中午字幕| 国产经典一区| 五月天综合网站| 国产精品久久久久9999高清| 欧美日韩水蜜桃| 国产精品久久久久久久久久齐齐| 亚洲日本网址| 国产精品成人自拍| 99国产精品视频免费观看一公开 | 精品国产免费人成网站| 亚洲综合福利| 日韩在线观看一区| 日韩三区四区| 伊人久久大香线蕉av不卡| 国产精品亚洲四区在线观看| 好看不卡的中文字幕| 久久精品国产在热久久| 日韩一二三区在线观看| 999视频精品| 久久伊人国产| 日韩高清成人在线| 日韩欧乱色一区二区三区在线| 欧美日韩一二| 欧美日韩国产观看视频| 国产精品对白| 国产精品一国产精品k频道56| 国产视频一区三区| 91精品啪在线观看国产18| 国产一区丝袜| 国产aⅴ精品一区二区三区久久| 日本欧美大码aⅴ在线播放| 在线视频亚洲欧美中文| 久久午夜精品| 久久最新视频| 亚洲视频二区| 欧美日韩调教| 国产精品1区| 精品美女在线视频| 精品一级视频| 黄色aa久久| 91精品福利| 免费久久99精品国产自在现线|