vue在組件中使用v-model的場景
一、使用場景
子組件想要使用父組件的值,又想去改父組件的值
二、V-Model的本質(zhì)
- 1.給子組件的
value
傳個變量 - 2.監(jiān)聽子組件的
input
事件,并且把傳過來的值賦給父組件的變量
三、關鍵步驟
1. props 的使用
在自定義的 vue 文件中,聲明父組件要向子組件傳遞的 prop
屬性,例如
props: { // 接收string和number類型的值, myValue: [String, Number], },
注意:
myValue
這個屬性名稱是可以自定義的,但[String, Number]
不能寫成字符串["String","Number"]
,因為此時它們是構造器,是js
的全局api
。
2. $emit 的使用
$emit
用于向上派發(fā)事件,在自定義組件中觸發(fā),例如:
methods: { changeInput ($event) { this.$emit('myInput', $event.target.value) }, }
向上派發(fā)myInput
事件,這樣model
監(jiān)聽myInput
才有意義: 當輸入字符時觸發(fā)input
事件,進而派發(fā)觸發(fā)自定義的myInput
事件, 然后model
監(jiān)聽myInput
,就實現(xiàn)了數(shù)據(jù)綁定。必須注意,這里的派發(fā)事件名myInput
必須和model
中的event的值相同。
PS: 通過
watch
監(jiān)聽input
標簽的值,然后$emit
派發(fā)事件,和通過@input
派發(fā)事件具有一樣的效果。只要能達到通信的效果即可,手段是多樣的。
3. 關鍵的 model
model
是允許 vue 自定義組件使用v-model
的關鍵,雖然有時我們不顯性的使用它,也不影響我們在自定義組件中使用v-model
指令,這只是因為被設置默認值。而有的時候,顯示的使用,并自定義model
的prop
和event
會有益。這是官網(wǎng)關于model
的介紹:
允許一個自定義組件在使用
v-model
時定制 prop 和 event。默認情況下,一個組件上的v-model
會把value
用作 prop 且把input
用作 event,但是一些輸入類型比如單選框和復選框按鈕可能想使用value
prop 來達到不同的目的。使用model
選項可以回避這些情況產(chǎn)生的沖突。
自定義 model 使用示例:
當我們使用model
的默認值的時候value
作prop
,input
作event
時,可以省略不寫model
。
model: { prop: 'myValue', // 默認是value event: 'myInput', // 默認是input },
四、不使用 model 選項的 v-model
當前?? , 我們不對 model 選項進行特殊設置 示例:
1. 父組件 home
<template> <home-child v-model="vModelData"></home-child> </template> <script> import HomeChild from './child/HomeChild.vue' export default { name: 'Home', components: { HomeChild }, data () { return { vModelData: 'hello v-model' } } } </script>
2. 子組件homeChild
<template> <div class="box"> <span>{{ value }}</span> <button @click="testVModel">測試v-model</button> </div> </template> <script> export default { name: 'HomeChild', props: { value: { type: String, default: '' } }, methods: { testVModel () { this.$emit('input', '我是子組件') } } } </script>
3. 效果
點擊前:
點擊后:
五、用 model 選項的 組件使用 v-model
1、父組件
<template> <div class="home"> <h3>輸入的實時內(nèi)容:{{ 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>
2. 子組件
<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) { // 向上派發(fā)myInput事件,這樣model監(jiān)聽myInput才有意義:當輸入字符時觸發(fā)input事件, // 進而派發(fā)觸發(fā)自定義的myInput事件,然后model監(jiān)聽myInput,就實現(xiàn)了數(shù)據(jù)綁定 this.$emit('myInput', $event.target.value) }, } } </script>
到此這篇關于vue在組件中使用v-model的場景的文章就介紹到這了,更多相關vue使用v-model內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Element ui table表格內(nèi)容超出隱藏顯示省略號問題
這篇文章主要介紹了Element ui table表格內(nèi)容超出隱藏顯示省略號問題,具有很好的參考價值,希望對大家有所幫助,2023-11-11Vue ElementUI this.$confirm async await封
這篇文章主要介紹了Vue ElementUI this.$confirm async await封裝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09