Vue v-model組件封裝(類似彈窗組件)
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ò)說(shuō)的就是我-.-.
<!--封裝的類彈窗組件-->
<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)可以通過(guò)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)然我們也可以通過(guò)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ì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)我們網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
上一篇:js判斷瀏覽器的環(huán)境(pc端,移動(dòng)端,還是微信瀏覽器)
欄 目:JavaScript
下一篇:解決vue elementUI中table里數(shù)字、字母、中文混合排序問(wèn)題
本文標(biāo)題:Vue v-model組件封裝(類似彈窗組件)
本文地址:http://www.jygsgssxh.com/a1/JavaScript/9260.html
您可能感興趣的文章
- 01-10在Vue項(xiàng)目中使用Typescript的實(shí)現(xiàn)
 - 01-10Vue中使用Lodop插件實(shí)現(xiàn)打印功能的簡(jiǎn)單方法
 - 01-10Vue filter 過(guò)濾當(dāng)前時(shí)間 實(shí)現(xiàn)實(shí)時(shí)更新效果
 - 01-10Vuex實(shí)現(xiàn)數(shù)據(jù)共享的方法
 - 01-10Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫(kù)及頁(yè)面數(shù)據(jù)傳遞操作實(shí)例分析
 - 01-10vue中根據(jù)時(shí)間戳判斷對(duì)應(yīng)的時(shí)間(今天 昨天 前天)
 - 01-10Vue+Node實(shí)現(xiàn)的商城用戶管理功能示例
 - 01-10vue實(shí)現(xiàn)拖拽效果
 - 01-10vue圖片上傳組件使用詳解
 - 01-10vue項(xiàng)目實(shí)現(xiàn)圖片上傳功能
 


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
 - 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
 - 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
 - 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
 - 5c語(yǔ)言計(jì)算三角形面積代碼
 - 6什么是 WSH(腳本宿主)的詳細(xì)解釋
 - 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
 - 8正則表達(dá)式匹配各種特殊字符
 - 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
 - 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
 
本欄相關(guān)
- 04-02javascript點(diǎn)線,點(diǎn)線的代碼
 - 04-02javascript潛力,javascript強(qiáng)大嗎
 - 04-02javascript替換字符串,js字符串的替換
 - 04-02javascript移出,js 移入移出
 - 04-02包含javascript舍的詞條
 - 04-02javascript并行,深入理解并行編程 豆瓣
 - 04-02javascript匿名,js匿名方法
 - 04-02javascript警報(bào),JavaScript警告
 - 04-02javascript遮蓋,JavaScript遮蓋PC端頁(yè)面
 - 04-02javascript前身,javascript的前身
 
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
 - 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
 - 01-10delphi制作wav文件的方法
 - 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 01-10C#中split用法實(shí)例總結(jié)
 - 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 


