vue父子組件動(dòng)態(tài)傳值的幾種方式及注意問(wèn)題詳解
1.vue父組件向子組件動(dòng)態(tài)傳值的兩種方法
在一些項(xiàng)目需求中需要父組件向子組件動(dòng)態(tài)傳值,比如我這里的需求是,父組件動(dòng)態(tài)通過(guò)axios獲取返回的圖片url數(shù)組然后傳給子組件,上傳圖片的子組件拿到該數(shù)組后進(jìn)行遍歷并展示圖片,因?yàn)橛袝r(shí)候獲取到的會(huì)是空,所以這里要考慮到動(dòng)態(tài)獲取。
方法有兩種,
vue父組件向子組件動(dòng)態(tài)傳值方法一:
props傳值,這里注意一個(gè)問(wèn)題,傳過(guò)來(lái)的值需要用watch監(jiān)聽(tīng)并賦值,否則這里獲取到的是空數(shù)組
父組件:
<uploadImg :width="200" :height="200" name="productImage" size="750px*750px" ref="productImage" :src-list="this.productImage"></uploadImg> this.productImage=res.data.cover;
這里把通過(guò)后臺(tái)返回的數(shù)組賦值給this.productImage,然后把該數(shù)組傳給子組件定義的props屬性src-list
export default {
name: '***',
props: {
srcList: {
}
},
data() {
uploadImg: ''
}
}
子組件:
watch代碼
watch:{
srcList(curVal,oldVal){
if(curVal){
this.uploadImg=curVal;
}
},
}
vue父組件向子組件動(dòng)態(tài)傳值方法二:
通過(guò)ref屬性,父組件調(diào)用子組件的方法,把要傳的數(shù)組作為參數(shù)傳給子組件,子組件獲取該參數(shù),并使用
父組件:
this.$refs.productImage.getSrcList(res.data.cover);
子組件:
getSrcList(val){
this.uploadImg=val;
}同理,子組件向父組件傳值,如果是動(dòng)態(tài)改變的,也要記得加watch函數(shù),動(dòng)態(tài)改變之后執(zhí)行的操作寫(xiě)在watch里,比如 this.$emit 的函數(shù)!
2.vue父組件中獲取子組件中的數(shù)據(jù)
<FormItem label="上傳頭像" prop="image"> <uploadImg :width="150" :height="150" :name="'avatar'" size="150px*150px" ref="avatar"></uploadImg> </FormItem> <FormItem label="上傳營(yíng)業(yè)執(zhí)照" prop="businessLicence"> <uploadImg :width="350" :height="200" :name="'businessLicence'" size="350px*200px" ref="businessLicence"></uploadImg> </FormItem>
自己寫(xiě)了個(gè)上傳圖片的子組件,父組件需要獲取到子組件上傳的圖片地址,
vue父組件中獲取子組件中數(shù)據(jù)方法一:
給相應(yīng)的子組件標(biāo)簽上加 ref = “avatar”
父組件在最后提交的時(shí)候獲取this.$refs.avatar.相應(yīng)數(shù)據(jù) 即可,因?yàn)樵谶@里才能保證圖片已經(jīng)上傳,否則如果圖片沒(méi)上傳,拿到的值一定為空。
vue父組件中獲取子組件中數(shù)據(jù)方法二:
$emit()
/*
子組件
*/
<template>
<input type='file' @change="changeUrl" />
</template>
<script>
export default {
methods: {
changeUrl(e) {
this.$emit('changeUrl', e.currentTarget.files[0].path)
}
}
}
</script>
/*
父組件
*/
<template>
<FormItem label="上傳營(yíng)業(yè)執(zhí)照" prop="businessLicence">
<uploadImg :width="350" :height="200" :name="'license'" size="350px*200px" @changeUrl="getUrl"></uploadImg>
</FormItem>
</template>
<script>
export default {
methods: {
getUrl(path) {
//這個(gè)就是你要的path,并且會(huì)雙向綁定
}
}
}
</script>
當(dāng)使用this.$emit方法獲取的時(shí)候,如果子組件想要給父組件傳入多個(gè)值,則可以寫(xiě)多個(gè)參數(shù),父組件在獲取的時(shí)候獲取多個(gè)參數(shù)的值即可
//父組件
getUrl(path1,path2) {
console.log(path1,path2)
}注意問(wèn)題:
1、父組件相應(yīng)事件寫(xiě)在該子組件上
2、子組件如果并沒(méi)有click事件觸發(fā),也沒(méi)有類(lèi)似本例input需要change事件觸發(fā),則在created或者mounted函數(shù)中讓該函數(shù)加載即可
3、子組件向父組件傳值需 是父組件 用到了 ,如果多個(gè)父組件引用了該子組件,則只有傳值的時(shí)候用的子組件來(lái)自哪個(gè)父組件,這個(gè)父組件才可以接收到值,其他父組件獲取不到子組件傳的值。
以上就是vue父子組件動(dòng)態(tài)傳值的幾種方式及注意問(wèn)題詳解的詳細(xì)內(nèi)容,更多關(guān)于vue父子組件動(dòng)態(tài)傳值的幾種方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用vue + koa2 + mockjs模擬數(shù)據(jù)的方法教程
這篇文章主要給大家介紹了關(guān)于利用vue + koa2 + mockjs模擬數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Vue實(shí)現(xiàn)移動(dòng)端日歷的示例代碼
工作中遇到一個(gè)需求是根據(jù)日歷查看某一天/某一周/某一月的睡眠報(bào)告,但是找了好多日歷組件都不是很符合需求,只好自己手寫(xiě)一個(gè)日歷組件,順便記錄一下,希望對(duì)大家有所幫助2023-04-04
前端處理axios請(qǐng)求下載后端返回的文件流代碼實(shí)例
使用axios可以很方便地獲取后端返回的文件流數(shù)據(jù),并在前端直接在瀏覽器下載,這篇文章主要給大家介紹了關(guān)于前端處理axios請(qǐng)求下載后端返回的文件流的相關(guān)資料,需要的朋友可以參考下2024-07-07
vue3中單文件組件<script?setup>實(shí)例詳解
<script?setup>是vue3中新引入的語(yǔ)法糖,目的是簡(jiǎn)化使用Composition?API時(shí)冗長(zhǎng)的模板代碼,下面這篇文章主要給大家介紹了關(guān)于vue3中單文件組件<script?setup>的相關(guān)資料,需要的朋友可以參考下2022-07-07
一文解決vue2 element el-table自適應(yīng)高度問(wèn)題
在寫(xiě)公司后臺(tái)項(xiàng)目的時(shí)候遇到一個(gè)需求,要求表格頁(yè)面不能有滾動(dòng)條,所以必須封裝一個(gè)公共方法來(lái)實(shí)現(xiàn)表格自適應(yīng)高度,本問(wèn)小編給大家介紹了如何解決vue2 element el-table自適應(yīng)高度問(wèn)題,需要的朋友可以參考下2023-11-11
Vue.js基礎(chǔ)指令實(shí)例講解(各種數(shù)據(jù)綁定、表單渲染大總結(jié))
這篇文章主要為大家詳細(xì)介紹了Vue.js基礎(chǔ)指令實(shí)例,各種數(shù)據(jù)綁定、表單渲染大總結(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

