2021-12-06 Vue v-model 雙向綁定

一膨更、v-model 雙向綁定

1.v-model的理解:

1、v-model實現(xiàn)原理
2界睁、自定義組件使用v-model

2.v-model原理:
vue中球昨,對<input>標簽使用v-model指令可以實現(xiàn)數(shù)據(jù)的雙向綁定;其原理是利用<input>標簽的value屬性和input事件封孙;

下面是我們使用v-model的方式:

<input v-model= "inputVal"  type="text">
<div class="show-panel">{{inputval}}</div> 
export default {
data() {
     return {
            inputVal:  ' '
         }
     }
}

效果如下:


20200114142402735.gif

為了更好的理解v-model的原理,我們先模擬v-model的實現(xiàn):

利用vue模擬v-model的實現(xiàn):

< input :value="inputVal" type="text" @input=" inputVal = $event.target.value">
<div class="show- panel">{{ inputVal }}</div>

<input>標簽添加了value屬性以及input事件讽营,當我們在輸入內容時虎忌,觸發(fā)input事件,將<input>標簽中的值賦給inputVal變量橱鹏。

原生js模擬v-model的實現(xiàn)

<input id="input" type="text" oninput= "handleInput()">
<div class=" show- panel"></div>
let inputEle = document. queryselector( ' #input ' )
let showPanelEle = document. querySelector( ' .show- panel ' )
let inputval =  ''
//將inputVal 的值賦給input標簽的value屬性
inputEle.value = inputVal
function handleInput() { 
//獲取input標簽的value屬性值膜蠢,并賦給inputVal、 showPanelEle
inputval = inputEle.value 
showPanelEle.innerHTML = inputEle.value
}

最開始將inputVal的值賦給<input>標簽的value屬性莉兰,當輸入內容時挑围,觸發(fā)input事件,獲取<input>標簽中最新的value屬性值糖荒,并將輸入值賦給inputVal變量和showPanelEle元素杉辙。

結合上面v-model的實現(xiàn),可以看出v-model利用了表單元素(<input>)的value屬性和input事件捶朵,通過定義一個變量inputVal蜘矢,并將inputVal賦給表單元素的value屬性,當觸發(fā)表單元素的input事件時將最新的輸入值更新給變量inputval综看,進而實現(xiàn)雙向綁定品腹。

自定義組件使用v-model

我們知道表單元素本身具有input事件,在輸入內容時寓搬,可以觸發(fā)珍昨,但是在vue中,對于自定義組件句喷,當自身沒有input事件時镣典,還可以使用v-model嗎?

答案是可以使用的唾琼,對于自定義組件兄春,當我們使用v-model后,組件會自動多了一個value屬性值和名為input的自定義事件(這一切都是vue幫我們實現(xiàn)的)锡溯,具體如下:

如下是一個HelloWorld.vue組件:

// HelloWord.vue 
< template>
<div>
<h1>{{ value }}</h1>
<button @click="handleClick" >點擊更新文本</button>
</div>
</template>

<script>
export default {
name: Helloworld,
props: {
     value: {
            type: string,
                   default: '',
      }
},
methods: {
        handleClick() {
},
         this.$emit(' input', 'Hi, Vue')
}
</script>


<!-- Add "scoped" attribute to limit CSS  to this component only  -->
<style scoped>
<style>

我們在使用HelloWorld.vue組件時候用了v-model

<hello-world v-model="inputval">< /hello-world>
< script>
import HelloWorld from './components/Helloworld.vue
export default {
name : 'app',
components: {
    HelloWorld
},
data() {
       return {
           inputval: 'hello, V-model'
    }
}
</script>

我們在HelloWorld.vue中可以獲取一個名為value的屬性赶舆,當我們需要改變該屬性值時,通過觸發(fā)一個名為input的自定義事件即可祭饭,這就是在自定義組件中使用v-model的方法芜茵。

效果如下:


hello.gif

如果不使用v-model還想達到相同的效果,我們需要這樣做:

<hello-world :value="inputVal" @input="handleInput"></hello-world>
import HelloWorld from ' ./components /Helloworld.vue
export default {
name : 'app'倡蝙,
components: { 
HelloWorld,
   data() {
       return {
            inputval: ' hello, v-model '
      }
},
methods: {
      handleInput(val) {
           this. inputVal = val
}

綜上所述九串,我們可以知道v-model是一種語法糖,它利用了標簽(表單元素、自定義元素)的value屬性和input事件(對于表單元素猪钮,input事件是本身原有的事件品山,對于自定義組件,input事件就是一個名為input的自定義事件)實現(xiàn)了雙向綁定烤低。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末肘交,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扑馁,更是在濱河造成了極大的恐慌涯呻,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腻要,死亡現(xiàn)場離奇詭異魄懂,居然都是意外死亡,警方通過查閱死者的電腦和手機闯第,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門市栗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咳短,你說我怎么就攤上這事填帽。” “怎么了咙好?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵篡腌,是天一觀的道長。 經(jīng)常有香客問我勾效,道長嘹悼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任层宫,我火速辦了婚禮杨伙,結果婚禮上,老公的妹妹穿的比我還像新娘萌腿。我一直安慰自己限匣,他們只是感情好,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布毁菱。 她就那樣靜靜地躺著米死,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贮庞。 梳的紋絲不亂的頭發(fā)上峦筒,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音窗慎,去河邊找鬼物喷。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的脯丝。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼伏伐,長吁一口氣:“原來是場噩夢啊……” “哼宠进!你這毒婦竟也來了?” 一聲冷哼從身側響起藐翎,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤材蹬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吝镣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堤器,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年末贾,在試婚紗的時候發(fā)現(xiàn)自己被綠了闸溃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拱撵,死狀恐怖辉川,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拴测,我是刑警寧澤乓旗,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站集索,受9級特大地震影響屿愚,放射性物質發(fā)生泄漏。R本人自食惡果不足惜务荆,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一妆距、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧函匕,春花似錦毅厚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酷窥,卻和暖如春咽安,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓬推。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工妆棒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓糕珊,卻偏偏與公主長得像动分,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子红选,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350