<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
如何實現在自定義的vue元件中使用v-model,。 起先覺得挺簡單,事實也挺簡單,但似乎又沒那麼簡單。因為深談這涉及指令原理、資料繫結實現原理。
要想在自定義元件中使用v-model,使用上其實就簡單幾步,這裡以自定義input元件為例。
關鍵步驟:
1.props的使用。在自定義的vue檔案中,宣告父元件要向子元件傳遞的prop屬性,例如
props: { // 接收string和number型別的值, myValue: [String, Number], },
注意:myValue這個屬性名稱是可以自定義的,但[String, Number]不能寫成字串["String","Number"],因為此時它們是構造器,是js的全域性api。
2.$emit的使用。用於向上派發事件,在自定義元件中觸發,例如:
methods: { changeInput ($event) { this.$emit('myInput', $event.target.value) }, }
向上派發myInput事件,這樣model監聽myInput才有意義: 當輸入字元時觸發input事件,進而派發觸發自定義的myInput事件, 然後model監聽myInput,就實現了資料繫結。必須注意,這裡的派發事件名“myInput”必須和model中的event的值相同。
PS: 通過watch監聽 input標籤的值,然後$emit派發事件,和通過@input派發事件具有一樣的效果。只要能達到通訊的效果即可,手段是多樣的。
3.關鍵的model。model是允許vue自定義元件使用v-model的關鍵,雖然有時我們不顯性的使用它,也不影響我們在自定義元件中使用v-model指令,這只是因為被設定預設值。而有的時候,顯示的使用,並自定義model的prop和event會有益。這是官閘道器於model的介紹:
允許一個自定義元件在使用
v-model
時客製化 prop 和 event。預設情況下,一個元件上的v-model
會把value
用作 prop 且把input
用作 event,但是一些輸入型別比如單選框和核取方塊按鈕可能想使用value
prop 來達到不同的目的。使用model
選項可以迴避這些情況產生的衝突。----本段摘自vue官網
自定義model使用範例:
model: { prop: 'myValue', // 預設是value event: 'myInput', // 預設是input },
當我們使用model的預設值的時候value作prop,input作event時,可以省略不寫model。
4.v-model的使用。在父元件中使用自定義元件,例如
<custom-model v-model="myValue"></custom-model>
這樣寫效果也一樣:
<custom-model :my-value="myValue"></custom-model>
<template> <!-- 自定義元件中使用v-mode指令 --> <input type="search" @input="changeInput" data-myValue=""> </template> <script> export default { name: 'CustomModel', // 當我們使用model的預設值的時候value作prop,input作event時,可以省略不寫model。 model: { prop: 'myValue', // 預設是value event: 'myInput', // 預設是input }, props: { // 接收string和number型別的值, // 注意不能是寫成字串["String","Number"],因為此時它們是構造器,是全域性變數 myValue: [String, Number], }, methods: { changeInput ($event) { // 向上派發myInput事件,這樣model監聽myInput才有意義:當輸入字元時觸發input事件, // 進而派發觸發自定義的myInput事件,然後model監聽myInput,就實現了資料繫結 this.$emit('myInput', $event.target.value) }, } } </script>
<template> <div class="home"> <h3>輸入的實時內容:{{ myValue }}</h3> <custom-model v-model="myValue"></custom-model> </div> </template> <script> import CustomModel from './CustomModel' export default { name: 'Home', components: { CustomModel, }, data () { return { myValue: '' } }, } </script>
本段是【每一個技術點都值得優寫】系列特寫段落。 是一種拓展補充,就像數學試卷最後的附加題,讀者可以自由選擇閱讀。
v-model簡要補充。 v-model是vue中常用且重要的指令,能起到資料雙向繫結的作用。 從MVVM(Model-View-ViewModel)架構的角度理解v-model的資料繫結, 它在需要view層和model層實現互動互動的時,非常有用。 例如,在view層輸入資料,會及時更新該資料到model層, 而更新model層中的資料,也會被及時更新到view層, 這種更新業務邏輯是ViewModel在起作用。
先來看下資料雙向繫結的效果:
那麼vue是如何實現資料繫結的?
①object型別資料實現資料可觀測,是通過Object的defineProperty()實現的。
②array型別資料實現資料可觀測,是通過攔截重寫資料的7個可運算元組且會改變陣列自身的方法實現的。
③依賴是一種表示資料和其使用者的關係,依賴管理器會為每一個依賴建立watcher範例。
④資料變化被觀測到後,會通過代表依賴的watcher範例,呼叫update()方法,通知檢視更新。
⑤vue提供了set和delete兩個全域性API,彌補部分新增和刪除資料手法,無法被觀測,進而影響資料響應式實現的不足。
到此這篇關於在vue自定義元件中使用 v-model指令詳情的文章就介紹到這了,更多相關 vue v-model指令內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45