亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue項(xiàng)目中v-model父子組件通信的實(shí)現(xiàn)詳解

 更新時(shí)間:2017年12月10日 10:14:26   作者:http://www.haorooms.com/post/vue_vmodel  
vue.js,是一個(gè)構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的 web 界面的庫(kù)。Vue.js 的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中v-model父子組件通信實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下。

前言

我們?cè)趘ue項(xiàng)目中,經(jīng)常有這樣的需求,父組件綁定v-model,子組件輸入更改父組件v-model綁定的數(shù)值。很多朋友對(duì)這種操作不是很清楚,這需要對(duì)v-model有比較深入的了解,今天談?wù)剉-model。

vue的雙向數(shù)據(jù)綁定

v-model這個(gè)指令只能用在<input>, <select>,<textarea>這些表單元素上,所謂雙向綁定,指的就是我們?cè)趈s中的vue實(shí)例中的data與其渲染的dom元素上的內(nèi)容保持一致,兩者無(wú)論誰(shuí)被改變,另一方也會(huì)相應(yīng)的更新為相同的數(shù)據(jù)。

這個(gè)問題在很多前端面試中,會(huì)提及。面試官問你,vue的雙向數(shù)據(jù)綁定原理是什么?當(dāng)然,這個(gè)也是耳熟能詳?shù)膯栴},百度隨便一搜索,到處都能找到答案。

一般都會(huì)搜索到,是用Object.defineProperty( ) ,來(lái)監(jiān)聽數(shù)據(jù)get和set,來(lái)實(shí)現(xiàn)數(shù)據(jù)劫持的。

假如對(duì)Object.defineProperty( )不是很了解,可以點(diǎn)擊上面鏈接,看看其語(yǔ)法!

舉個(gè)簡(jiǎn)單的例子:

var blog = {
 name: 'haorooms博客'
};
console.log(blog.name); // haorooms博客

如果想要在執(zhí)行console.log(blog.name)的同時(shí),直接給haorooms博客加個(gè)書名號(hào),那要怎么處理呢?或者說(shuō)要通過(guò)什么監(jiān)聽對(duì)象 blog的屬性值。這時(shí)候Object.defineProperty( )就派上用場(chǎng)了,代碼如下:

var blog= {}
var name = '';
Object.defineProperty(blog, 'name', {
 set: function (value) {
 name = value;
 console.log('歡迎來(lái)到' + value);
 },
 get: function () {
 return '《' + name + '》'
 }
})
blog.name = 'haorooms博客'; // 歡迎來(lái)到haorooms博客
console.log(blog.name); // 《haorooms博客》

上面代碼執(zhí)行一下,可以查看效果!

關(guān)于 vue的雙向數(shù)據(jù)綁定,具體如何實(shí)現(xiàn)的?網(wǎng)上也有很多實(shí)現(xiàn)的代碼,這里就不多累贅了!

v-model 的使用

上面開了一個(gè)小差,講了那么多,其實(shí)就是為了說(shuō)明Vue 是單項(xiàng)數(shù)據(jù)流,v-model 只是語(yǔ)法糖而已。

<input v-model="haorooms" />
<input v-bind:value="haorooms" v-on:input="haorooms= $event.target.value" />

第一行的代碼其實(shí)只是第二行的語(yǔ)法糖。然后第二行代碼還能簡(jiǎn)寫成這樣:

<input :value="haorooms" @input="haorooms= $event.target.value" />

也就是說(shuō),

<input v-model="haorooms" />

也可以寫成

<input :value="haorooms" @input="haorooms= $event.target.value" />

v-model在組件上的使用

回到我們一開始的疑問了?vue中v-model如何進(jìn)行父子組件的通信?如何在組件中使用呢?假如你理解了我上面的例子,那么,我們就可以很簡(jiǎn)單的在組件中使用v-model了。

父組件代碼如下:

 <template>
 <div id="demo">
 <test-model v-model="haorooms"></test-model>
 <span>{{haorooms}}</span>
</div>
</template>
<script>
  import testModel from 'src/components/testModel'
  export default {
   data(){
      return{
         haorooms: "haorooms"
      }
    },
    components: {
      testModel,
    }
  }
</script>
<style lang="scss" scoped>
</style>

子組件代碼如下:

<template>
<span>
   <input
    ref="input"
    :value="value"
    @input="$emit('balabala', $event.target.value)"
   >
  </span>
</template>
<script>
  export default {
    data(){
      return{
      }
    },
    props: ["value"],
    model: {
      prop: 'value',
      event: 'balabala'
    }
  }
</script>
<style lang="scss" scoped>
</style>

我們可以通過(guò)上面代碼,子組件修改父組件v-model綁定的值!

實(shí)現(xiàn)截圖如下:

v-model 的缺點(diǎn)和解決辦法

在創(chuàng)建類似復(fù)選框或者單選框的常見組件時(shí),v-model就不好用了。

<input type="checkbox" v-model="haorooms" />

我們可以用如下方式解決:

<input type="checkbox" :checked="status" @change="status = $event.target.checked" />

父組件可以如下寫:

<my-checkbox v-model="haorooms"></my-checkbox>

子組件:

<input 
        type="checkbox"
        <!--這里就不用 input 了,而是 balabala-->
        @change="$emit('balabala', $event.target.checked)"
        :checked="value"
       />
 export default {
    data(){
      return{
      }
    },
    props: ['checked'], //這里就不用 value 了,而是 checked
   model: {
     prop: 'checked',
     event: 'balabala'
    },
  }

關(guān)于vue的v-model就寫到這里。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Vue子組件props從父組件接收數(shù)據(jù)并存入data

    Vue子組件props從父組件接收數(shù)據(jù)并存入data

    這篇文章主要介紹了Vue子組件props從父組件接收數(shù)據(jù)并存入data的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域(rectangle marker)的方法

    vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域(rectangle marker)的方法

    這篇文章主要介紹了vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域 rectangle marker的方法,幫助大家實(shí)現(xiàn)區(qū)域標(biāo)記功能,感興趣的朋友可以了解下
    2020-10-10
  • vue中Promise的使用方法詳情

    vue中Promise的使用方法詳情

    這篇文章主要介紹了vue中Promise的使用方法詳情,Promise可以說(shuō)是異步編程的一種解決方法,主要是為了解決代碼亂的情景而出現(xiàn)的,下文介紹其具體用法,需要的小伙伴可以參考一下
    2022-03-03
  • nginx+vite項(xiàng)目打包以及部署的詳細(xì)過(guò)程

    nginx+vite項(xiàng)目打包以及部署的詳細(xì)過(guò)程

    我們使用nginx部署Vue項(xiàng)目,實(shí)質(zhì)上就是將Vue項(xiàng)目打包后的內(nèi)容同步到nginx指向的文件夾,下面這篇文章主要給大家介紹了關(guān)于nginx+vite項(xiàng)目打包以及部署的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • vue前端實(shí)現(xiàn)導(dǎo)出頁(yè)面為pdf(分頁(yè)導(dǎo)出、不分頁(yè)導(dǎo)出及分模塊導(dǎo)出)

    vue前端實(shí)現(xiàn)導(dǎo)出頁(yè)面為pdf(分頁(yè)導(dǎo)出、不分頁(yè)導(dǎo)出及分模塊導(dǎo)出)

    在實(shí)際應(yīng)用中可能用戶希望將系統(tǒng)中一個(gè)頁(yè)面展示的所有數(shù)據(jù)報(bào)表,用PDF的文件格式下載下來(lái),以便于其他用途,這篇文章主要給大家介紹了關(guān)于vue前端實(shí)現(xiàn)導(dǎo)出頁(yè)面為pdf(分頁(yè)導(dǎo)出、不分頁(yè)導(dǎo)出及分模塊導(dǎo)出)的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • vue3網(wǎng)絡(luò)請(qǐng)求添加loading過(guò)程

    vue3網(wǎng)絡(luò)請(qǐng)求添加loading過(guò)程

    這篇文章主要介紹了vue3網(wǎng)絡(luò)請(qǐng)求添加loading過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue2.0與bootstrap3實(shí)現(xiàn)列表分頁(yè)效果

    vue2.0與bootstrap3實(shí)現(xiàn)列表分頁(yè)效果

    這篇文章主要為大家詳細(xì)介紹了vue2.0與bootstrap3實(shí)現(xiàn)列表分頁(yè)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳解Vue中keep-alive的使用

    詳解Vue中keep-alive的使用

    keep-alive是Vue的內(nèi)置組件,當(dāng)它包裹動(dòng)態(tài)組件時(shí),會(huì)緩存不活動(dòng)的組件實(shí)例,而不是銷毀,這篇文章主要介紹了詳解Vue中keep-alive的使用,需要的朋友可以參考下
    2023-03-03
  • vue使用高德地圖實(shí)現(xiàn)軌跡顯隱效果

    vue使用高德地圖實(shí)現(xiàn)軌跡顯隱效果

    本文主要介紹了在vue中如何使用高德地圖實(shí)現(xiàn)軌跡顯隱的功能,包括了相關(guān)代碼的編寫和具體實(shí)現(xiàn)步驟,對(duì)于想要在自己的項(xiàng)目中使用這一功能的開發(fā)者有一定的參考價(jià)值,希望大家對(duì)此有所幫助,同時(shí)也歡迎大家多多支持腳本之家
    2024-10-10
  • vue實(shí)現(xiàn)動(dòng)態(tài)綁定行內(nèi)樣式style的backgroundImage

    vue實(shí)現(xiàn)動(dòng)態(tài)綁定行內(nèi)樣式style的backgroundImage

    這篇文章主要介紹了vue實(shí)現(xiàn)動(dòng)態(tài)綁定行內(nèi)樣式style的backgroundImage方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論