1. 程式人生 > >淺談 Vue v-model指令的實現原理

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

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

我們來看一下它的效果: 

輸入框的值和一個數據是繫結的,輸入框的值變化,和他繫結的值也會發生變化

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

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

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

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

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

例如我們要設計一個 自定義貨幣輸入的元件, 通過 v-model暴露元件的值,我們可能使用如下的元件程式碼

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

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

要搞明白v-model的實現,需要通過檢視官方的自定義v-model元件示例的部分程式碼來進行說明

我們看上圖中的程式碼,有行  $emit的程式碼,這行程式碼實際上會觸發一個 input事件, 'input'後的引數就是傳遞給

v-model繫結的屬性的值,也就是說 v-model實現自定義的資料繫結的原理是這樣的:

首先,大體的元件結構:

  1. <custom-comp v-model="myattr">
  2. <input /> ??
  3. <select> ??
  4. </custom-comp>

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

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

  1. 這裡有個疑問,為什麼是 'input'呢??? 三個字,看文件!
  2. 這個就是 vue對 v-model實現的一個規則: 使用了v-model的元件會
  3. 自動監聽 input 事件,並把這個input事件所攜帶的值 傳遞給v-model所繫結的屬性!這樣元件內部的值就給到了父元件了

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

監聽原生元件的事件,當獲取到原生元件的值後把 值通過呼叫 $emit('input' ,data) 方法去觸發 input事件

相關推薦

Vue v-model指令實現原理

vue的v-model是一個十分強大的指令,它可以自動讓原生表單元件的值自動和你選擇的值繫結, 我們來看一下它的效果:  輸入框的值和一個數據是繫結的,輸入框的值變化,和他繫結的值也會發生變化 我們在手動輸入 hello的過程中 下面和他繫結的p標籤的值也是實時

Vuev-model指令實現資料雙向繫結

v-bind指令只能實現資料的單向繫結,從M繫結到V,無法實現雙向繫結。 使用v-model指令,可以實現表單元素和Model中資料的雙向繫結,並且v-model指令只能運用在表單元素中。 <

Vue v-model指令的學習

v-model指令的學習.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>v-model指令的學習</title> <sc

instanceof 和 typeof 的實現原理

typeof 實現原理 typeof 一般被用於判斷一個變數的型別,我們可以利用 typeof 來判斷number, string, object, boolean, function, undefined, symbol 這七種型別,這種判斷能幫助

做面試的不倒翁: Vue 中 computed 實現原理

編者按:我們會不時邀請工程師談談有意思的技術細節,希望知其所以然能讓大家在面試有更出色表現。也給面試官提供更多思路。 雖然目前的技術棧已由 Vue 轉到了 React,但從之前使用 Vue 開發的多個專案實際經歷來看還是非常愉悅的,Vue 文件清晰規範,api

Vue 中 computed 實現原理

雖然目前的技術棧已由 Vue 轉到了 React,但從之前使用 Vue 開發的多個專案實際經歷來看還是非常愉悅的,Vue 文件清晰規範,api 設計簡潔高效,對前端開發人員友好,上手快,甚至個人認為在很多場景使用 Vue 比React 開發效率更高,之前也有斷斷

Vue.js框架 v-model指令

Vue.js v-model v-model.number v-model.lazy v-model.trim v-model 指令在表單 <input> 及 <textarea> 元素上創建雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素。盡管有

VUE v-model事件原理

bsp model tar 一個 lec func 雙向 ntb 更新數據 v-model 指令在表單 <input>、<textarea> 及 <select> 元素上創建雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素。盡

oninput 事件 比較angular張的 ng-model指令Vue中的 v-model指令

oninput 事件在使用者輸入時觸發。 該事件在 <input> 或 <textarea> 元素的值發生改變時觸發。 提示: 該事件類似於 onchange 事件。不同之處在於 oninput 事件在元素值發生變化是立即觸發, onchange 在元素失去焦點時觸發。 另外

說說 Vue.js 中的 v-model 指令以及如何繫結表單元素

我們可以使用 Vue.js 中的 v-model 指令來完成表單資料的雙向繫結。 1 基礎用法 1.1 文字輸入框(text) 這裡演示了在文字輸入框上輸入的內容,會實時對映到繫結的資料上。 html: <div id="app"> <inp

說說 Vue.js v-model 指令的修飾符

1 .lazy v-model 指令預設會在 input 事件中載入輸入框中的資料(中文輸入法中輸入拼音的過程除外)。我們可以使用 .lazy 懶載入修飾符,讓其只在 change 事件中再載入輸入框中的資料。 html: <div id="app">

Vue】父元件使用v-model實現子父元件動態傳值。

前言:父元件與子元件直接的傳值會有些小問題,特別是動態傳值。 一、實現動態傳值 <body> <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script> <

vue雙向繫結原理

簡析mvvm框架 目前angular,reat和vue都是mvvm型別的框架 以vue為例 這裡的vm 就是vue框架,它相當於中間樞紐的作用,連線著model 和view. 當前臺顯示的view發生變化了,它會實時反應到viewModel上,如果有需要,v

Vue v-model原理解析

  從最初學習Vue就知道v-model可以實現雙資料繫結,但它能實現繫結的原理到底是什麼呢?通過檢視官方文件和各種部落格資料,以下是我的理解。   根據官方文件介紹,v-model本質上就是語法糖,即利用v-model繫結資料後,其實就是既綁定了資料,又添加了一個input事

Vue 指令

談到 Vue 指令,我們腦海裡浮現的第一個疑問便是 指令 是什麼: 指令是告訴計算機從事某一特殊運算的程式碼。如:資料傳送指令、算術運算指令、位運算指令、程式流程控制指令、串操作指令、處理器控制指令。 那麼 Vue 指令又是什麼呢?是用來幹什麼的?作為一名攻城獅

vue中關於checkbox資料繫結v-model指令的個人理解

vue.js為開發者提供了很多便利的指令,其中v-model用於表單的資料繫結很常見,下面是最常見的例子:<div id='myApp'>    <input type="text" v-model="msg"><br>    {{msg}

vue,angular,react資料雙向繫結原理分析

傳統做法 前端維護狀態,手動操作DOM更新檢視。前端框架對伺服器資料通過模版進行渲染。當用戶產生了一個動作之後,我們通過document.getElementBy... 手動進行DOM更新。  框架幫忙分離資料和檢視,後續狀態更新需要手動操作DOM,因為框架只管首次渲染,不

vuev-model指令

code str mod color bubuko data mage scrip vue v-model指令用來綁定表單,數據傳值。 如上,當在信息1輸入框(表單)中輸入值時,數據會對應變化;在信息2輸入框中輸入值時,數據並未變化。   <di

vue.js

oba boot rip lar com nbsp blank all nod   在使用vue.js前,首先得安裝vue.js。   對於vue.js的安裝,有以下幾種方法:   1、通過官網下載:   Vue.js 官網下載地址:http://vuejs.org/

AngularJS中的指令指令間的相互通信

file str 裏的 按鈕 相互 要去 direct 不能 pil 說到AngularJS,我們首先想到的大概也就是雙向數據綁定和指令系統了,這兩者也是AngularJS中最為吸引人的地方。雙向數據綁定呢,感覺沒什麽好說的,那麽今天我們就來簡單的討論下AngularJS這