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

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

詳解vue v-model

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

1. v-model原理

vue中v-model是一個語法糖,所謂的語法糖就是對其他基礎功能的二次封裝而產(chǎn)生的功能。簡單點說,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://www.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://www.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的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲主播在线| 国产99精品| 久久精品一区二区三区中文字幕| 日韩电影二区| 91欧美极品| 精品在线网站观看| 欧美中文一区二区| 97精品资源在线观看| 国产成人在线中文字幕| 中文字幕中文字幕精品| 亚洲激情久久| 麻豆视频在线看| 国产精品欧美一区二区三区不卡| 日韩专区一卡二卡| 五月天久久网站| 午夜免费一区| 免费在线观看视频一区| 亚洲精品影院在线观看| 中文字幕系列一区| 亚洲欧美日韩国产一区| 蜜臀精品久久久久久蜜臀| 麻豆精品一区二区综合av| 青草av.久久免费一区| 国产精品久久亚洲不卡| 久久激情网站| 国产精品magnet| 欧美在线综合| 精品九九久久| 日韩激情啪啪| 欧美精品激情| 日韩在线免费| 你懂的国产精品| 国产精品第一国产精品| 日韩精品视频中文字幕| 一本一道久久a久久精品蜜桃| 综合亚洲色图| 日韩中文字幕亚洲一区二区va在线| 免费看久久久| 国产精品久久乐| 欧美aa在线视频| 国内精品伊人| 国产精品蜜芽在线观看| 国产精品99一区二区三| 国产高清不卡| 婷婷成人在线| 91国语精品自产拍| 麻豆91精品| 亚洲激情二区| 国产精品老牛| 国产偷自视频区视频一区二区| 欧美激情福利| 国产日产精品一区二区三区四区的观看方式 | 亚洲欧洲日韩精品在线| 色偷偷色偷偷色偷偷在线视频| 日韩精品dvd| 亚洲福利一区| 狠狠干成人综合网| 亚洲深爱激情| 中文字幕日韩高清在线| 91大神在线观看线路一区| 免费国产自线拍一欧美视频| 四虎精品一区二区免费| 国产精品嫩模av在线| 国产精品v日韩精品v欧美精品网站| 热三久草你在线| 视频一区二区国产| 欧美综合精品| 日本一区免费网站| 精品视频黄色| 亚洲午夜黄色| 久久在线91| 午夜亚洲精品| 亚洲精品**中文毛片| 日韩在线成人| 日韩精品看片| 国产美女高潮在线| 亚洲欧洲美洲国产香蕉| 中文字幕在线视频久| 日韩国产欧美在线播放| 国产乱码午夜在线视频| 美女91精品| 激情黄产视频在线免费观看| 99香蕉国产精品偷在线观看 | 日韩黄色av| 欧美日韩一视频区二区| 欧洲在线一区| 久久精品国产网站| 丝袜亚洲另类欧美| 麻豆视频在线看| 国产午夜久久av| 中文字幕成人| 国产精品试看| 久久亚洲国产| 国产一区二区三区亚洲综合| 视频一区二区不卡| 精精国产xxxx视频在线野外| 日韩网站在线| 成人三级高清视频在线看| 国产日产一区| 日韩视频一二区| 久久夜夜操妹子| 国产一区三区在线播放| 麻豆极品一区二区三区| 青青草国产成人99久久| 国产欧美一区二区三区国产幕精品 | 日韩av字幕| 日韩欧美精品一区| 国产精品v一区二区三区| 香蕉成人久久| 欧美精选一区二区三区| 美女少妇全过程你懂的久久| 日本午夜精品一区二区三区电影| 999久久久91| 久久影院一区| 天堂网在线观看国产精品| 久久精品青草| 91精品国产91久久久久久黑人| 老牛影视精品| 黑人精品一区| 高清不卡亚洲| 99国产精品| 日韩中文字幕区一区有砖一区| 首页亚洲欧美制服丝腿| 99精品99| 欧美日韩一区二区高清| 亚洲综合电影| 97精品国产| 黄色成人在线网址| 日韩av午夜在线观看| 欧美交a欧美精品喷水| 麻豆理论在线观看| 欧美/亚洲一区| 三级久久三级久久久| 福利视频一区| 在线天堂中文资源最新版| 亚洲欧美日韩精品一区二区 | 欧美美女一区| 日韩欧美午夜| 亚洲欧美日韩国产一区二区| 日韩精品一区二区三区中文字幕| 日本色综合中文字幕| 国产精品久久久久久久久久久久久久久| 日本亚洲欧美天堂免费| 国产日韩亚洲| 亚洲精品**中文毛片| 久久成人一区| 精品视频一二| 亚洲网址在线观看| 国产午夜精品一区二区三区欧美 | 福利一区和二区| 免费成人在线视频观看| 国产日韩中文在线中文字幕| 色婷婷精品视频| 亚洲精品四区| 日韩精品久久理论片| 久久亚洲一区| 国产亚洲人成a在线v网站 | 欧美sss在线视频| 欧美xxxx性| 欧美亚洲三级| 国产精品久久久久久久久久妞妞 | 性欧美69xoxoxoxo| 美女精品视频在线| 久久国产精品99国产| 四虎8848精品成人免费网站| 日韩午夜视频在线| 性色av一区二区怡红| 久久三级毛片| 国产精品v一区二区三区| 最新中文字幕在线播放| 7777精品| 亚洲五月综合| 亚洲一级在线| 日韩成人亚洲| 精品国产黄a∨片高清在线| 亚洲资源av| 好吊视频一区二区三区四区| 日韩欧美中文| 精品高清久久| 国产综合亚洲精品一区二| 欧美三级网址| 999久久久免费精品国产| 色婷婷色综合| 欧美成a人免费观看久久| 麻豆成人av在线| 麻豆中文一区二区| 精品国产欧美日韩一区二区三区| 久久国产88| 国产精品视频首页| 国产亚洲人成a在线v网站| 国产乱码精品一区二区亚洲| 欧美aa在线视频| 日韩1区2区| 欧美成人基地| 免费欧美一区| 亚洲欧洲美洲国产香蕉| 国产美女久久| 视频在线不卡免费观看| 欧美午夜不卡| 亚州av一区|