vue實(shí)現(xiàn)父組件獲取子組件的方法或?qū)傩灾翟斀?/h1>
更新時(shí)間:2022年03月31日 09:22:31 作者:mini74
這篇文章主要介紹了vue實(shí)現(xiàn)父組件獲取子組件的方法或?qū)傩灾翟斀?,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
父組件獲取子組件方法或?qū)傩灾?/h2>
vue的本質(zhì)就是每一塊只負(fù)責(zé)自己這一塊的工作,這樣更容易維護(hù)。
這里主要使用了vue的$ref
- 當(dāng)用在一般的標(biāo)簽上時(shí),主要功能是獲取dom節(jié)點(diǎn),進(jìn)行一些dom的操作。
- 當(dāng)使用在子組件上,可以用來獲取子組件的屬性。
那么下面我們要實(shí)現(xiàn)的就是如何在父組件上使用子組件的方法
目標(biāo):我需要實(shí)現(xiàn)一個(gè)在父組件上控制子組件的彈窗顯示,并且通過參數(shù)判斷顯示哪一個(gè)內(nèi)容。
首先我們很容易想到就是綁定一個(gè)點(diǎn)擊事件,并且攜帶一個(gè)參數(shù),并且獲取子組件的屬性,這樣在這個(gè)父組件中我并沒有控制子組件的開關(guān),只是我獲取了子組件的方法或者屬性,讓子組件自己控制開關(guān)。
//這里是子組件
<popup ?ref="popup"></popup>
//綁定點(diǎn)擊事件,并且攜帶參數(shù)
<div class="item-box" @click="showPop('teacher')">
//定義點(diǎn)擊事件
showPop(event) {
//獲取子組件的屬性/方法,這里是獲取popup子組件的show方法,并且攜帶參數(shù)
?? ?this.$refs.popup.show(event);
},
在子組件中就需要定義方法,控制顯示彈窗內(nèi)容,并且將傳遞過來的參數(shù)保存
//控制彈窗的顯示隱藏
<div v-show="showPopup">
? ? ?<!-- 關(guān)閉按鈕,點(diǎn)擊直接將showPopup定義為false-->
? ? ? <div class="closePopup" @click="showPopup = false"></div>
? ? ? <!-- 老師數(shù)量 -->
? ? ? //通過判斷type值控制顯示哪個(gè)彈窗內(nèi)容
? ? ? <teacher v-if="type =='teacher'"></teacher>
? ? ? <student v-else-if="type =='student'"></student>
? ? ? <turnover v-else></turnover>
</div>
//在data中定義默認(rèn)值
data(){
? ? ?return {
? ? ? ? ? showPopup: false,
? ? ? ? ? type: ''
? ? ? }
? },
//最后在methods中定義show方法,控制彈窗的顯示
methods:{
? ?show(type){
? ? ? ? this.type = type
? ? ? ? this.showPopup = true;
? ? }
}
這樣就完成了,每個(gè)組件只負(fù)責(zé)我自己需要做的事情,不會(huì)影響到其他組件,這樣更易于維護(hù)。
父組件獲取子組件中的變量
在vue項(xiàng)目日常開發(fā)中,難免要把功能性組件抽離出來,這樣結(jié)構(gòu)就會(huì)出現(xiàn)父子組價(jià),兄弟組件等,但是這樣就會(huì)涉及到不同組件需要互相使用其中的值得問題。
之前有說過通過ref來讓父組件操作子組件,并且傳值,那么我們今天來詳細(xì)看看。
案例一:點(diǎn)擊父組件的按鈕,操作子組件顯示
注:可以通過獲取id/class來操作,這里我就不介紹這種方法了,至于jquery的話,在vue中還是慎用。
介紹:這里通過給子組件綁定ref屬性,引號(hào)命名自定義,然后父組件通過 this.$refs.名字 就可以操作子組件的元素,以改變它的樣式等。
<template>
? ? <div class="DbSource-box">
? ? ? ? <el-button type="primary" icon="" class="addBtn" @click="addDbSource()">新增</el-button>
? ? ? ? <db-source-add ref="addAlert" v-on:init="init"></db-source-add>
? ? </div>
</template>
<script>
? ? import DbSourceAdd from "../components/DbSourceManager/DbSourceAdd";
? ? export default {
? ? ? ? name: "DbSourceManager",
? ? ? ? components: {DbSourceAdd},
? ? ? ? methods: {
? ? ? ? ? ? // 點(diǎn)擊新增按鈕,彈出新增數(shù)據(jù)源的彈框
? ? ? ? ? ? addDbSource(){
? ? ? ? ? ? ? ? this.$refs.addAlert.$el.style.display = "block";
? ? ? ? ? ? },
? ? ? ? }
? ? }
</script>
案列二:獲取子組件data中的變量
父組件:
這里通過給子組件綁定ref屬性,引號(hào)中的命名自定義,然后父組件通過 this.$refs.名字.變量名 就可以獲得子組件中的值
<template>
? ? <div class="DbSource-box">
? ? ? ? <el-button type="primary" icon="" class="selectBtn" @click="deleteSelectDbSource()">批量刪除</el-button>
? ? ? ? <db-source-table ref="getSelectData" :Data="Data" v-on:init="init"></db-source-table>
? ? </div>
</template>
<script>
? ? import DbSourceTable from "../components/DbSourceManager/DbSourceTable";
? ? export default {
? ? ? ? name: "DbSourceManager",
? ? ? ? components: {DbSourceTable},
? ? ? ? methods: {
? ? ? ? ? ? // 刪除選中的數(shù)據(jù)源(批量刪除)
? ? ? ? ? ? deleteSelectDbSource(){
? ? ? ? ? ? ? ? console.log(this.$refs.getSelectData.multipleSelection)
? ? ? ? ? ? },
? ? ? ? }
? ? }
</script>
子組件:
<template>
? ? <div class="table-box">
? ? ? ??
? ? </div>
</template>
<script>
? ? export default {
? ? ? ? name: "DbSourceTable",
? ? ? ? props:["Data"],
? ? ? ? data(){
? ? ? ? ? ? return {
? ? ? ? ? ? ? ? multipleSelection:[],
? ? ? ? ? ? ? ? pagesize: 3,
? ? ? ? ? ? ? ? currpage: 1,
? ? ? ? ? ? ? ? currId:""
? ? ? ? ? ? }
? ? ? ? }
</script>
好了,以上就是父組件獲取子組件的值并且操作子組件的方法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- vue父組件中獲取子組件中的數(shù)據(jù)(實(shí)例講解)
- vue父組件異步獲取數(shù)據(jù)傳給子組件的方法
- 詳解VUE里子組件如何獲取父組件動(dòng)態(tài)變化的值
- Vue父組件如何獲取子組件中的變量
- vue 父組件通過$refs獲取子組件的值和方法詳解
- vue.js 子組件無法獲取父組件store值的解決方式
- vue子組件如何獲取父組件的內(nèi)容(props屬性)
- vue中實(shí)現(xiàn)子組件接收父組件方法并獲取返回值
- vue子組件獲取到它父組件數(shù)據(jù)的4種方法
- VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題
- vue父組件異步如何獲取數(shù)據(jù)傳給子組件
- vue3父組件使用ref獲取子組件的屬性和方法
- vue子組件實(shí)時(shí)獲取父組件的數(shù)據(jù)實(shí)現(xiàn)
相關(guān)文章
-
解決Element-ui radio單選框label布爾/數(shù)值的一個(gè)坑
這篇文章主要介紹了解決Element-ui radio單選框label布爾/數(shù)值的一個(gè)坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教 2023-04-04
-
Vue 如何使用props、emit實(shí)現(xiàn)自定義雙向綁定的實(shí)現(xiàn)
這篇文章主要介紹了Vue 如何使用props、emit實(shí)現(xiàn)自定義雙向綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2020-06-06
-
vue+elementUI實(shí)現(xiàn)動(dòng)態(tài)面包屑
這篇文章主要為大家詳細(xì)介紹了vue+elementUI實(shí)現(xiàn)動(dòng)態(tài)面包屑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2022-04-04
-
在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決
我們?cè)陂_web開發(fā)的時(shí)候,經(jīng)常會(huì)使用到element或者uview-ui,下面這篇文章主要給大家介紹了關(guān)于在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決的相關(guān)資料,需要的朋友可以參考下 2022-04-04
-
Vue實(shí)現(xiàn)dom元素拖拽并限制移動(dòng)范圍的操作代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)dom元素拖拽并限制移動(dòng)范圍的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2023-12-12
最新評(píng)論
父組件獲取子組件方法或?qū)傩灾?/h2>
vue的本質(zhì)就是每一塊只負(fù)責(zé)自己這一塊的工作,這樣更容易維護(hù)。
這里主要使用了vue的$ref
- 當(dāng)用在一般的標(biāo)簽上時(shí),主要功能是獲取dom節(jié)點(diǎn),進(jìn)行一些dom的操作。
- 當(dāng)使用在子組件上,可以用來獲取子組件的屬性。
那么下面我們要實(shí)現(xiàn)的就是如何在父組件上使用子組件的方法
目標(biāo):我需要實(shí)現(xiàn)一個(gè)在父組件上控制子組件的彈窗顯示,并且通過參數(shù)判斷顯示哪一個(gè)內(nèi)容。
首先我們很容易想到就是綁定一個(gè)點(diǎn)擊事件,并且攜帶一個(gè)參數(shù),并且獲取子組件的屬性,這樣在這個(gè)父組件中我并沒有控制子組件的開關(guān),只是我獲取了子組件的方法或者屬性,讓子組件自己控制開關(guān)。
//這里是子組件 <popup ?ref="popup"></popup> //綁定點(diǎn)擊事件,并且攜帶參數(shù) <div class="item-box" @click="showPop('teacher')"> //定義點(diǎn)擊事件 showPop(event) { //獲取子組件的屬性/方法,這里是獲取popup子組件的show方法,并且攜帶參數(shù) ?? ?this.$refs.popup.show(event); },
在子組件中就需要定義方法,控制顯示彈窗內(nèi)容,并且將傳遞過來的參數(shù)保存
//控制彈窗的顯示隱藏 <div v-show="showPopup"> ? ? ?<!-- 關(guān)閉按鈕,點(diǎn)擊直接將showPopup定義為false--> ? ? ? <div class="closePopup" @click="showPopup = false"></div> ? ? ? <!-- 老師數(shù)量 --> ? ? ? //通過判斷type值控制顯示哪個(gè)彈窗內(nèi)容 ? ? ? <teacher v-if="type =='teacher'"></teacher> ? ? ? <student v-else-if="type =='student'"></student> ? ? ? <turnover v-else></turnover> </div>
//在data中定義默認(rèn)值 data(){ ? ? ?return { ? ? ? ? ? showPopup: false, ? ? ? ? ? type: '' ? ? ? } ? }, //最后在methods中定義show方法,控制彈窗的顯示 methods:{ ? ?show(type){ ? ? ? ? this.type = type ? ? ? ? this.showPopup = true; ? ? } }
這樣就完成了,每個(gè)組件只負(fù)責(zé)我自己需要做的事情,不會(huì)影響到其他組件,這樣更易于維護(hù)。
父組件獲取子組件中的變量
在vue項(xiàng)目日常開發(fā)中,難免要把功能性組件抽離出來,這樣結(jié)構(gòu)就會(huì)出現(xiàn)父子組價(jià),兄弟組件等,但是這樣就會(huì)涉及到不同組件需要互相使用其中的值得問題。
之前有說過通過ref來讓父組件操作子組件,并且傳值,那么我們今天來詳細(xì)看看。
案例一:點(diǎn)擊父組件的按鈕,操作子組件顯示
注:可以通過獲取id/class來操作,這里我就不介紹這種方法了,至于jquery的話,在vue中還是慎用。
介紹:這里通過給子組件綁定ref屬性,引號(hào)命名自定義,然后父組件通過 this.$refs.名字 就可以操作子組件的元素,以改變它的樣式等。
<template> ? ? <div class="DbSource-box"> ? ? ? ? <el-button type="primary" icon="" class="addBtn" @click="addDbSource()">新增</el-button> ? ? ? ? <db-source-add ref="addAlert" v-on:init="init"></db-source-add> ? ? </div> </template>
<script> ? ? import DbSourceAdd from "../components/DbSourceManager/DbSourceAdd"; ? ? export default { ? ? ? ? name: "DbSourceManager", ? ? ? ? components: {DbSourceAdd}, ? ? ? ? methods: { ? ? ? ? ? ? // 點(diǎn)擊新增按鈕,彈出新增數(shù)據(jù)源的彈框 ? ? ? ? ? ? addDbSource(){ ? ? ? ? ? ? ? ? this.$refs.addAlert.$el.style.display = "block"; ? ? ? ? ? ? }, ? ? ? ? } ? ? } </script>
案列二:獲取子組件data中的變量
父組件:
這里通過給子組件綁定ref屬性,引號(hào)中的命名自定義,然后父組件通過 this.$refs.名字.變量名 就可以獲得子組件中的值
<template> ? ? <div class="DbSource-box"> ? ? ? ? <el-button type="primary" icon="" class="selectBtn" @click="deleteSelectDbSource()">批量刪除</el-button> ? ? ? ? <db-source-table ref="getSelectData" :Data="Data" v-on:init="init"></db-source-table> ? ? </div> </template>
<script> ? ? import DbSourceTable from "../components/DbSourceManager/DbSourceTable"; ? ? export default { ? ? ? ? name: "DbSourceManager", ? ? ? ? components: {DbSourceTable}, ? ? ? ? methods: { ? ? ? ? ? ? // 刪除選中的數(shù)據(jù)源(批量刪除) ? ? ? ? ? ? deleteSelectDbSource(){ ? ? ? ? ? ? ? ? console.log(this.$refs.getSelectData.multipleSelection) ? ? ? ? ? ? }, ? ? ? ? } ? ? } </script>
子組件:
<template> ? ? <div class="table-box"> ? ? ? ?? ? ? </div> </template>
<script> ? ? export default { ? ? ? ? name: "DbSourceTable", ? ? ? ? props:["Data"], ? ? ? ? data(){ ? ? ? ? ? ? return { ? ? ? ? ? ? ? ? multipleSelection:[], ? ? ? ? ? ? ? ? pagesize: 3, ? ? ? ? ? ? ? ? currpage: 1, ? ? ? ? ? ? ? ? currId:"" ? ? ? ? ? ? } ? ? ? ? } </script>
好了,以上就是父組件獲取子組件的值并且操作子組件的方法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue父組件中獲取子組件中的數(shù)據(jù)(實(shí)例講解)
- vue父組件異步獲取數(shù)據(jù)傳給子組件的方法
- 詳解VUE里子組件如何獲取父組件動(dòng)態(tài)變化的值
- Vue父組件如何獲取子組件中的變量
- vue 父組件通過$refs獲取子組件的值和方法詳解
- vue.js 子組件無法獲取父組件store值的解決方式
- vue子組件如何獲取父組件的內(nèi)容(props屬性)
- vue中實(shí)現(xiàn)子組件接收父組件方法并獲取返回值
- vue子組件獲取到它父組件數(shù)據(jù)的4種方法
- VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題
- vue父組件異步如何獲取數(shù)據(jù)傳給子組件
- vue3父組件使用ref獲取子組件的屬性和方法
- vue子組件實(shí)時(shí)獲取父組件的數(shù)據(jù)實(shí)現(xiàn)
相關(guān)文章
解決Element-ui radio單選框label布爾/數(shù)值的一個(gè)坑
這篇文章主要介紹了解決Element-ui radio單選框label布爾/數(shù)值的一個(gè)坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Vue 如何使用props、emit實(shí)現(xiàn)自定義雙向綁定的實(shí)現(xiàn)
這篇文章主要介紹了Vue 如何使用props、emit實(shí)現(xiàn)自定義雙向綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06vue+elementUI實(shí)現(xiàn)動(dòng)態(tài)面包屑
這篇文章主要為大家詳細(xì)介紹了vue+elementUI實(shí)現(xiàn)動(dòng)態(tài)面包屑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決
我們?cè)陂_web開發(fā)的時(shí)候,經(jīng)常會(huì)使用到element或者uview-ui,下面這篇文章主要給大家介紹了關(guān)于在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決的相關(guān)資料,需要的朋友可以參考下2022-04-04Vue實(shí)現(xiàn)dom元素拖拽并限制移動(dòng)范圍的操作代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)dom元素拖拽并限制移動(dòng)范圍的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12