淺談 Vue v-model指令的實現原理,vuev-model

來源:互聯網
上載者:User

淺談 Vue v-model指令的實現原理,vuev-model

vue的v-model是一個十分強大的指令,它可以自動讓原生表單組件的值自動和你選擇的值綁定,

我們來看一下它的效果:

輸入框的值和一個資料是綁定的,輸入框的值變化,和他綁定的值也會發生變化

我們可以參照官方文檔的例子    http://cn.vuejs.org/v2/guide/forms.html#文本

我們在手動輸入 hello的過程中 下面和他綁定的p標籤的值也是即時變化的

如此神奇的效果是如何?的呢? 還是參照官方文檔

http://cn.vuejs.org/v2/guide/components.html#使用自訂事件的表單輸入組件

官方也說明了,v-model只不過是一個文法糖而已,真正的實現靠的還是

  1. v-bind:綁定響應式資料
  2. 觸發 input 事件 並傳遞資料 (核心和重點)

現在我們也想設計自己的表單組件,也想通過 v-model暴露組件的值,怎麼做呢?

例如我們要設計一個 自訂貨幣輸入的組件, 通過 v-model暴露組件的值,我們可能使用如下的組件代碼

<currency-input v-model="price"></currency-input>

然後再使用 這個我們自己定義的組件時, 組件內部會暴露出 組件的值到 v-model所綁定的值中去;那它是如何?的呢?\

要搞明白v-model的實現,需要通過查看官方的自訂v-model組件樣本的部分代碼來進行說明

我們看中的代碼,有行  $emit的代碼,這行代碼實際上會觸發一個 input事件, 'input'後的參數就是傳遞給v-model綁定的屬性的值,也就是說 v-model實現自訂的資料繫結的原理是這樣的:

首先,大體的組件結構:

<custom-comp v-model="myattr">  <input /> ??  <select> ?? </custom-comp>

也就是自訂的組件內部一般包含原生的表單組件(當然非表單的組件也可以)

然後,給原生控制項綁定事件,捕捉到原生組件的值,利用 $emit方法,觸發input方法,組件監聽到 input事件然後把值傳入到myattr中.

這裡有個疑問,為什麼是 'input'呢??? 三個字,看文檔!

這個就是 vue對 v-model實現的一個規則: 使用了v-model的組件會

自動監聽 input 事件,並把這個input事件所攜帶的值 傳遞給v-model所綁定的屬性!這樣組件內部的值就給到了父組件了

通過以上講解,我們總結一下如何利用v-model實現自訂的表單組件:

監聽原生組件的事件,當擷取到原生組件的值後把 值通過調用 $emit('input' ,data) 方法去觸發 input事件 

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.