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

Vue v-model組件封裝(類似彈窗組件)

 更新時(shí)間:2020年01月08日 09:56:57   作者:努力_努力  
這篇文章主要介紹了Vue中的 v-model組件封裝(類似彈窗組件),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

v-model是vue的一個(gè)語(yǔ)法糖,限制在input和textarea等這些表單元素中,官網(wǎng)所給的例子也是僅限于表單組件

Vue.component('base-checkbox', {
 model: {
  prop: 'checked',
  event: 'change'
 },
 props: {
  checked: Boolean
 },
 template: `
  <input
   type="checkbox"
   v-bind:checked="checked"
   v-on:change="$emit('change', $event.target.checked)"
  >
 `
})
<base-checkbox v-model="lovingVue"></base-checkbox>

現(xiàn)在我們?nèi)绻氚裿-model用到除表單之外的自定義組件中,該怎么使用呢,其實(shí)官網(wǎng)所給的例子也比較清晰了,只是如果死腦筋的話,那就限制住了,沒錯(cuò)說的就是我-.-.

<!--封裝的類彈窗組件-->
<template>
  <div>
    <div v-show="value">這是v-model的彈窗組件</div>
  </div>
</template>
<script>
export default {
  props:{
    value:{
      type:Boolean,
      default:false
    }
  }
}
</script>
<!--父組件-->
<template>
  <div>
    <v-model v-model="value"></v-model>
    <button @click="value=true">點(diǎn)擊顯示</button>
    <button @click="value=false">點(diǎn)擊消失</button>
  </div>
</template>
<script>
import VModel from "./Vmodel"
export default {
  components:{VModel},
  data:function(){
    return {
      value:true
    }
  }
}
</script>

其實(shí)這樣父組件這邊已經(jīng)可以通過v-model對(duì)顯示和消失進(jìn)行控制了,但是封裝組件的 value 這個(gè)屬性名是不能修改的,必須叫 value ,叫 value1 就不可以了

props:{
    value1:{ //失效
      type:Boolean,
      default:false
    }
  }

原因,看源碼

function transformModel (options, data: any) {
 const prop = (options.model && options.model.prop) || 'value' //子組件不存在options.model,默認(rèn)給value
 const event = (options.model && options.model.event) || 'input'//event="input"
 ;(data.attrs || (data.attrs = {}))[prop] = data.model.value
 const on = data.on || (data.on = {})
 const existing = on[event] //undefined
 const callback = data.model.callback //f()
 if (isDef(existing)) { //false
  if (
   Array.isArray(existing)
    ? existing.indexOf(callback) === -1
    : existing !== callback
  ) {
   on[event] = [callback].concat(existing)
  }
 } else {
  on[event] = callback //把回調(diào)賦值給監(jiān)聽的函數(shù)
 }
}

so,我們就可以加上model屬性,進(jìn)行代碼修改

<template>
  <div>
    <div v-show="value">這是v-model的彈窗組件</div>
    <div @click="cancelClick">組件內(nèi)部調(diào)用</div>
  </div>
</template>
<script>
export default {
  props:{
    value:{
      type:Boolean,
      default:false
    },
    model:{
      prop:"value",
      event:'change'
    }
  },
  methods:{
    cancelClick:function(){
      //內(nèi)部調(diào)用這個(gè)方法可以進(jìn)行控制
      this.$emit("change",false)
    }
  }
}
</script>

當(dāng)然我們也可以通過model屬性,對(duì)value這個(gè)屬性名進(jìn)行修改,也是實(shí)現(xiàn)同樣的效果

bool:{
    type:Boolean,
    default:false
  },
model:{
  prop:"bool",
  event:'change'
}

注意如果滅有加model屬性的話,對(duì)props的value屬性名修改的話,是沒效果的,默認(rèn)的v-model的event默認(rèn)修改的還是value

const prop = (options.model && options.model.prop) || 'value' //子組件不存在options.model,默認(rèn)給value
 const event = (options.model && options.model.event) || 'input'//event="input"

總結(jié)

以上所述是小編給大家介紹的Vue中的 v-model組件封裝(類似彈窗組件),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Vue如何引入全局過濾器

    Vue如何引入全局過濾器

    這篇文章主要介紹了Vue如何引入全局過濾器問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue中通過屬性綁定為元素綁定style行內(nèi)樣式的實(shí)例代碼

    Vue中通過屬性綁定為元素綁定style行內(nèi)樣式的實(shí)例代碼

    這篇文章主要介紹了Vue中通過屬性綁定為元素綁定style行內(nèi)樣式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解Vue的鍵盤事件

    詳解Vue的鍵盤事件

    這篇文章主要為大家介紹了Vue的鍵盤事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • vue單應(yīng)用在ios系統(tǒng)中實(shí)現(xiàn)微信分享功能操作

    vue單應(yīng)用在ios系統(tǒng)中實(shí)現(xiàn)微信分享功能操作

    這篇文章主要介紹了vue單應(yīng)用在ios系統(tǒng)中實(shí)現(xiàn)微信分享功能操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue watch 偵聽對(duì)象屬性詳解

    Vue watch 偵聽對(duì)象屬性詳解

    Vue的watch偵聽器格式有兩種:方法格式和對(duì)象格式的偵聽器,這篇文章主要介紹了Vue watch 偵聽對(duì)象屬性相關(guān)知識(shí),需要的朋友可以參考下
    2023-04-04
  • vue3使用mqtt的示例代碼

    vue3使用mqtt的示例代碼

    這篇文章主要介紹了vue3使用mqtt的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Nginx同一端口部署多個(gè)前后端分離的vue項(xiàng)目完整步驟

    Nginx同一端口部署多個(gè)前后端分離的vue項(xiàng)目完整步驟

    最近做項(xiàng)目結(jié)構(gòu)優(yōu)化,前端項(xiàng)目都是部署在nginx上,想實(shí)現(xiàn)同一個(gè)端口可以訪問多個(gè)前端項(xiàng)目,所以就有了本文,這篇文章主要給大家介紹了關(guān)于Nginx同一端口部署多個(gè)前后端分離的vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • vue 的點(diǎn)擊事件獲取當(dāng)前點(diǎn)擊的元素方法

    vue 的點(diǎn)擊事件獲取當(dāng)前點(diǎn)擊的元素方法

    今天小編就為大家分享一篇vue 的點(diǎn)擊事件獲取當(dāng)前點(diǎn)擊的元素方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 淺談vue?腳手架文件結(jié)構(gòu)及加載過程

    淺談vue?腳手架文件結(jié)構(gòu)及加載過程

    這篇文章主要介紹了vue腳手架文件結(jié)構(gòu)及加載過程淺談,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • vue使用canvas繪制圓環(huán)

    vue使用canvas繪制圓環(huán)

    這篇文章主要介紹了vue使用canvas繪制圓環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論