欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解vue中v-model和v-bind綁定數(shù)據(jù)的異同

 更新時間:2020年08月10日 14:41:21   作者:scl95tx  
這篇文章主要介紹了vue中v-model和v-bind綁定數(shù)據(jù)的異同,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

vue的模板采用DOM模板,也就是說它的模板可以當做DOM節(jié)點運行,在瀏覽器下不報錯,綁定數(shù)據(jù)有三種方式,一種是插值,也就是{{name}}的形式,一種是v-bind,還有一種是v-model。{{name}}的形式比較好理解,就是以文本的形式和實例data中對應的屬性進行綁定。比如:

var app = new Vue({
 el: '#app',
 template: '<div @click="toggleName">{{name}}</div>',
 data: {
 name: 'tom',
 },
 method: {
 toggleName() {
 this.name = this.name === 'tom' ? 'sony' : 'tom'
 },
 },
})

上面的字符串模板中,有一個{{name}},它和data.name是綁定的,當data.name發(fā)生變化時,視圖也發(fā)生變化。

但是v-bindv-model這兩種綁定比較難區(qū)分,特別是在表單元素中,剛開始會混淆到底應該怎么使用。

v-bind

首先來看下v-bind,它的用法是后面加冒號,跟上html元素的attributions,例如:

<p v-bind:class="classed">

這里的v-bind:class會產生什么效果呢?實際上,首先你可以看下如果不加v-bind:,也就是:<p class="classed">,這只是一個普通的p元素,含有一個.classed的類,沒有任何數(shù)據(jù)參與進來。

當加上v-bind:之后,就不一樣了。它的值classed不是字符串,而是vue實例對應的data.classed的這個變量。也就是說data.classed是什么值,它就會給class屬性傳遞什么值,當data.classed發(fā)生變化的時候,class屬性也發(fā)生變化,這非常適合用在通過css來實現(xiàn)動畫效果的場合。除了class,其他大部分html原始的屬性都可以通過這種方式來綁定,而且為了方便,它可以直接縮寫成冒號形式,例如:

var app = Vue({
 el: '#app',
 template: '<img :src="src">',
 data: {
 src: '',
 },
 beforeMount() {
 fetch(...).then(...).then(res => this.src = res.src) // 這里修改了data.src
 },
})

上面這段代碼中,默認情況下data.src是空字符串,也就說不會有圖片顯示出來,但是當從遠端獲取到圖片地址之后,更新了data.src,圖片就會顯示出來了。

v-model

v-model主要是用在表單元素中,它實現(xiàn)了雙向綁定。雙向綁定大家都非常熟了,簡單的說就是默認情況下,它跟上面兩種情況的數(shù)據(jù)綁定是一樣的,實例的data.name發(fā)生變化的時候,對應的試圖中也會發(fā)生變化。但是v-model綁定后,它還會反過來,在input中手動輸入新的內容,會反過來修改data.name的值,如果在視圖中其他地方使用到了data.name,那么這個地方就會因為data.name的變化而變化,從而實現(xiàn)關聯(lián)動態(tài)效果。下面來舉個栗子:

var app = Vue({
 el: '#app',
 template: '<label><input v-model="name">{{name}}</label>',
 data: {
 name: '',
 },
})

上面<input>中綁定了name,那么當input的value發(fā)生變化時,data.name就會跟著發(fā)生變化,而data.name變化了{{name}}的地方也會跟著變化。

v-model是一種雙向綁定,那么也就是說,你綁定的元素得有機會改變值。所以實際上v-model基本上只會用在input, textarea, select這些表單元素上。

v-bind和v-model混用

有一些情況我們需要v-bind和v-model一起使用。這個時候如果不留神,就會搞亂狀況,分不清哪里應該怎么控制。舉個栗子:

<input :value="name" v-model="body">

上面就是一個栗子。data.name和data.body,到底誰跟著誰變呢?甚至,它們會不會產生沖突呢?

實際上它們的關系和上面的闡述是一樣的,v-bind產生的效果不含有雙向綁定,所以:value的效果就是讓input的value屬性值等于data.name的值,而v-model的效果是使input和data.body建立雙向綁定,因此首先data.body的值會給input的value屬性,其次,當input中輸入的值發(fā)生變化的時候,data.body還會跟著改變。

現(xiàn)在的問題是,當這兩個一起使用的時候,誰都優(yōu)先級高?誰會無效?實驗證明,v-model將會被使用,v-bind這個時候無效了,因為它正好綁定在value屬性上,如果綁在其他屬性上v-bind是不受影響的。在這種情況下,v-bind失效,即使你修改data.name,input里面不會有任何變化。

這也說明,v-model建立的雙向綁定對輸入型元素input, textarea, select等具有優(yōu)先權,會強制實行雙向綁定,如果你愿意的話。
這說明,在單獨的input中,同時使用v-bind和v-model是沒有必要的,雖然不會造成沖突。

注意上面我說道“單獨”,也就是說,在一組輸入中,它們又要另當別論。一組輸入包括單選組、復選組、下拉選項、下拉選項組。

<label for="value in options">
 <input type="checkbox" :value="value" v-model="selected">
</label>

在data中,它們是這樣的:

data: {
 options: [1, 2, 3, 4, 5],
 selected: [],
}

一組復選框,或者一組下拉選項組,也就是select mutiple="true"的情況,它們的結果是一個數(shù)組,而非單個值,因此data.selected是一個數(shù)組,當一個選項被選中之后,這個選項的value值會被加入到data.selected中(不是按options里面的順序,而是操作過程中的邏輯)。這個時候:value就是有效的,因為它表示把options數(shù)組中對應的選項值傳遞給value,并不是雙向綁定的意思,而只是傳值過去(當然,當options中對應的值發(fā)生變化時,value值也會變化)。相當于說,v-bind負責value的值,v-model負責選中狀態(tài)。當然,v-model是雙向綁定,界面上你去勾選會影響data.selected的值,你在程序中操作了data.selected,也會反過來影響界面。v-model影響的是勾選效果,而v-bind影響的是值。(實際上,v-bind雖然只是影響值,但是也會影響勾選效果,比如本來一個選框是被勾選的,通過v-bind綁定值發(fā)生了變化,那么新來的值就不會在data.selected中,這個選項就不會被勾選。如果沒有被勾選,改變后的值又在data.selected中,那又會被勾選上。)

注意,只有當type="checkbox"是確定的情況下,才會讓上述情況生效,type值不能是動態(tài)值,因為v-model被多次綁定同一個變量時,需要去檢查type值,而如果這個時候type是動態(tài)的,比如用:type="type"進行動態(tài)綁定,就會導致模板編譯報錯。

v-model其實是v-bind和v-on的語法糖

這是vue官方文檔中特別指出的,在閱讀到這一句之前,我還對此很模糊,當閱讀到:

<input v-model="something">其實是<input v-bind:value="something" v-on:input="something = $event.target.value">的語法糖
時,這種認識上的模糊就被消除了。

我們這篇文章沒有講到v-on,它其實就是一個事件綁定器。我們仔細閱讀一下<input v-bind:value="something" v-on:input="something = $event.target.value">,發(fā)現(xiàn)它由兩部分組成:v-bind:valuev-on:input,必須是value屬性和input事件,否則也不會等價于v-model,而且input事件里面,正好是something等于當前輸入值。

真因為這一原理,v-model瞬間就不再難理解了。

小結

總之,要區(qū)分v-bind和v-model,只需要記住三句話:

1. v-bind是數(shù)據(jù)綁定,沒有雙向綁定效果,但不一定在表單元素上使用,任何有效元素上都可以使用;
2. v-model是雙向綁定,基本上只用在表單元素上;
3. 當v-bind和v-model同時用在一個元素上時,它們各自的作用沒變,但v-model優(yōu)先級更高,而且需區(qū)分這個元素是單個的還是一組出現(xiàn)的。

到此這篇關于詳解vue中v-model和v-bind綁定數(shù)據(jù)的異同的文章就介紹到這了,更多相關vue中v-model和v-bind綁定數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Vue3實現(xiàn)一個穿梭框效果的示例代碼

    使用Vue3實現(xiàn)一個穿梭框效果的示例代碼

    這篇文章主要給大家介紹了如何使用?Vue3?實現(xiàn)一個穿梭框效果,當選中數(shù)據(jù),并且點擊相對應的方向箭頭時,選中的數(shù)據(jù)會發(fā)送到對面,并且數(shù)據(jù)會保持正確的順序進行排列,文中有詳細的代碼講解,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • vue axios封裝httpjs,接口公用配置攔截操作

    vue axios封裝httpjs,接口公用配置攔截操作

    這篇文章主要介紹了vue axios封裝httpjs,接口公用配置攔截操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue 集成jTopo 處理方法

    vue 集成jTopo 處理方法

    這篇文章主要介紹了vue 集成jTopo 處理方法,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • vuex 的簡單使用

    vuex 的簡單使用

    vuex是一個專門為vue.js設計的集中式狀態(tài)管理架構。這篇文章主要介紹了vuex 的簡單使用,需要的朋友可以參考下
    2018-03-03
  • Vue3?props的使用示例詳解

    Vue3?props的使用示例詳解

    這篇文章主要介紹了Vue3?props的使用詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Vue中關于computed計算屬性的妙用

    Vue中關于computed計算屬性的妙用

    這篇文章主要介紹了Vue中關于computed計算屬性的妙用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 在vue中配置不同的代理同時訪問不同的后臺操作

    在vue中配置不同的代理同時訪問不同的后臺操作

    這篇文章主要介紹了在vue中配置不同的代理同時訪問不同的后臺操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue移動端實現(xiàn)紅包雨效果

    vue移動端實現(xiàn)紅包雨效果

    這篇文章主要為大家詳細介紹了vue移動端實現(xiàn)紅包雨效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Vue向下滾動加載更多數(shù)據(jù)scroll案例詳解

    Vue向下滾動加載更多數(shù)據(jù)scroll案例詳解

    這篇文章主要介紹了Vue向下滾動加載更多數(shù)據(jù)scroll案例詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • moment轉化時間戳出現(xiàn)Invalid Date的問題及解決

    moment轉化時間戳出現(xiàn)Invalid Date的問題及解決

    這篇文章主要介紹了moment轉化時間戳出現(xiàn)Invalid Date的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論